在運行用戶想要運行的命令之前執行另一個命令

在運行用戶想要運行的命令之前執行另一個命令

假設我想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'

相關內容