I wonder if it is possible to set a "global" alias in bash, like zsh's -g alias option – not "global" from the user's point of view but from the shell's point of view.
What I want to know is: Can an alias (or something else?) be substituted anywhere on a line in bash?
e.g..:
alias ...='../..'
Best Answer
From the
bash(1)
man page:So
bash
aliases do not have this capability, nor doesbash
have a trivialpre-exec
capability (but see here for a hack though).As a partial workaround you may be able to use a completion function, here's a minimal starting point:
Now when you hit tab on a
cd
command and the word under the cursor contains "...", each will be replaced with "../..". Completion suffers from a slight problem too though (excluding its complexity) which you can probably guess from the above, you need to specify it on a command by command basis.The bash-completion package uses a default completion handler, with on-the-fly loading of completion functions to deal with this. If you're feeling adventurous you should be able to modify its internal function
_filedir()
function which is used for general file/directory expansion so as to include a similar substitution "...".(All of which reminds of the NetWare shell, which made "..." Just Work.)