Do global aliases exist in bash
Bash aliases do not have this capability, but you can write:
alias cd='cd '
alias ...='../..'
cd ... # teleport to ../..
Explanation:
Bash Reference Manual says:
If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.
Possible solution is a Readline
's macro. You can write:
set -o emacs
bind '"\C-x...":"cd ../.."'
Type echo
,Control+x,...
You should see echo cd ../..
See
- "Key Bindings" in Readline Init File Syntax
help bind
bash aliases only work based on the first word on the line and can not be defined in a global sense like zsh.
The only fudge I can think of would be to define a variable e.g.
export PP=../.. # $PP meaning parent of parent
cd $PP/anotherDirectory
But to be honest I would prefer to just type ../.. in that case. In short bash does not do it.
From the bash(1)
man page:
ALIASES
Aliases allow a string to be substituted for a word when it is used as
the first word of a simple command. [...]
So bash
aliases do not have this capability, nor does bash
have a trivial pre-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:
function _comp_cd() {
local cur=${COMP_WORDS[COMP_CWORD]} # the current token
[[ $cur =~ \.\.\. ]] && {
cur=${cur/.../..\/..}
COMPREPLY=( $cur )
return
}
COMPREPLY=() # let default kick in
}
complete -o bashdefault -o default -F _comp_cd cd
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.)