Bash

在執行使用者想要執行的命令之前執行另一個命令

  • January 9, 2019

假設我想以ls這種方式修改工具的原始行為:

$ ls
Hello World
file1 file2 ...

我怎樣才能做到這一點?

執行時ls我想執行另一個命令,比如說echo "Hello World!".

我看到的快速解決方案是使用別名:

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

但是,這不是一個真正的解決方案,因為當我執行orig_ls它時會輸出"Hello World!".

有時別名不夠強大,無法輕鬆地做你想做的事,所以這裡有一種不使用它們的方法。

在您的 shell 啟動時獲取的某個文件中(例如.bashrc),添加以下函式:

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

與別名不同,函式可以遞歸。這就是為什麼command ls使用ls;而不是 它告訴你的 shell 使用實際的ls而不是你剛剛定義的函式。

您一定不要忘記致電ls

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

引用自:https://unix.stackexchange.com/questions/180982