Shell

為什麼 sudo 忽略別名?

  • March 27, 2018

我正在執行 Ubuntu 10.04 並upstart用於守護程序管理。我的企業應用程序作為守護程序執行,並且由於各種特權而必須以 root 身份執行。例如:

sudo start my-application-long-ID
sudo stop my-application-long-ID
etc

我想介紹一個alias將這些命令縮寫為:

alias startapp='sudo start my-application-long-ID'

並按原樣執行它startapp,但我希望別名中沒有 sudo 。

alias startapp='start my-application-long-ID'

執行時不使用sudo startapp,返回sudo: startapp: command not found

但是,當我添加別名時:

alias sudo='sudo '

sudo startapp現在有效,但我仍然很好奇為什麼 sudo 忽略別名。

我從這裡看到以下資訊。

使用 sudo 時,請使用別名擴展(否則 sudo 會忽略您的別名)

alias sudo='sudo '

這裡解釋了它不起作用的原因。

Bash 只檢查命令的第一個單詞是否有別名,之後的任何單詞都不會檢查。這意味著在像 sudo ll 這樣的命令中,bash 只檢查第一個單詞 (sudo) 的別名,忽略 ll。我們可以通過在別名值的末尾添加一個空格來告訴 bash 檢查別名之後的下一個單詞(即 sudo)。

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