使用别名覆盖内置命令

时间:2015-02-28 15:40:44

标签: bash function shell alias built-in

我正在尝试创建一个覆盖cd命令的别名。这将在" real"之前和之后执行脚本。 cd

这是我到目前为止所做的:

alias cd="echo before; cd $1; echo after"

这会执行echo beforeecho after command,但总是更改目录~

我该如何解决这个问题?

我也试过了cd(){ echo before; cd $1; echo after; }然而它在#34;之前重复了回声。

2 个答案:

答案 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