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

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

假设我想ls这样修改该工具的原始行为:

$ ls
Hello World
file1 file2 ...

我怎样才能做到这一点?

运行时ls我想运行另一个命令,比如说echo "Hello World!"

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

alias orig_ls="ls"
alias ls='echo "Hello World!"'

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

答案1

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

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

ls () {
    echo "Hello world!"
    command ls "$@"
}

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

答案2

您一定不要忘记致电ls

alias ls='echo "Hello World!"; ls'

相关内容