问题
I am trying to make an alias that overrides the cd
command. This is going to execute a script before and after the "real" cd
.
Here is what I have so far:
alias cd="echo before; cd $1; echo after"
This executes the echo before
and echo after command
however it always changes directory ~
How would I fix this?
I also tried cd(){ echo before; cd $1; echo after; }
however it repetedly echos "before".
回答1:
I also tried
cd(){ echo before; cd $1; echo after; }
however it repetedly echos "before".
because it calls recursively the cd
defined by you. To fix, use the builtin
keyword like:
cd(){ pwd; builtin cd "$@"; pwd; }
Ps: anyway, IMHO isn't the best idea redefining the shell builtins.
回答2:
Just to add to @jm666's answer:
To override a non-builtin with a function, use command
. For example:
ls() { command ls -l; }
which is the equivalent of alias ls='ls -l'
.
command
works with builtins as well. So, your cd
could also be written as:
cd() { echo before; command cd $1; echo after; }
To bypass a function or an alias and run the original command or builtin, you can put a \
at the beginning:
\ls # bypasses the function and executes /bin/ls directly
来源:https://stackoverflow.com/questions/28783509/override-a-builtin-command-with-an-alias