我正在尝试创建一个覆盖cd
命令的别名。这将在" real"之前和之后执行脚本。 cd
。
这是我到目前为止所做的:
alias cd="echo before; cd $1; echo after"
这会执行echo before
和echo after command
,但总是更改目录~
我该如何解决这个问题?
我也试过了cd(){ echo before; cd $1; echo after; }
然而它在#34;之前重复了回声。
答案 0 :(得分:7)
我也试过
cd(){ echo before; cd $1; echo after; }
然而它在“之前”重复回声。
因为它以递归方式调用您定义的cd
。要解决此问题,请使用builtin
关键字,如:
cd(){ pwd; builtin cd "$@"; pwd; }
Ps:无论如何,恕我直言不是重新定义shell内置的最好主意。
答案 1 :(得分:2)
只需添加到@ jm666的answer:
要使用函数覆盖非内置函数,请使用command
。例如:
ls() { command ls -l; }
相当于alias ls='ls -l'
。
command
也适用于内置组件。因此,您的cd
也可以写成:
cd() { echo before; command cd $1; echo after; }
要绕过函数或别名并运行原始命令或内置命令,可以在开头添加\
:
\ls # bypasses the function and executes /bin/ls directly