在运行用户想要运行的命令之前运行另一个命令

Ion*_*zău 9 command-line shell bash alias

假设我想以ls这种方式修改工具的原始行为:

$ ls
Hello World
file1 file2 ...
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

运行时ls我想运行另一个命令让我们说echo "Hello World!"

我看到的快速解决方案是使用别名:

alias orig_ls="ls"
alias ls='echo "Hello World!"'
Run Code Online (Sandbox Code Playgroud)

然而,这不是一个真正的解决方案,因为当我运行orig_ls它时会输出"Hello World!".

und*_*ail 12

有时别名不够强大,无法轻松完成您想要的操作,因此这里有一种不使用它们的方法。

在 shell 启动时获取的某些文件中(例如.bashrc),添加以下函数:

ls () {
    echo "Hello world!"
    command ls "$@"
}
Run Code Online (Sandbox Code Playgroud)

与别名不同,函数可以递归。这就是为什么command ls使用ls;而不是; 它告诉你的 shell 使用实际的ls而不是你刚刚定义的函数。

  • 的确。此解决方案可更好地扩展。+1 (2认同)

Hau*_*ing 9

你一定不要忘记打电话ls

alias ls='echo "Hello World!"; ls'
Run Code Online (Sandbox Code Playgroud)

  • @IonicăBizău 任何给定的“别名扩展规则”只使用一次。 (6认同)