Sudo

如何使sudo保留$ PATH?

  • August 27, 2020

我有一個程序安裝在 /opt 下的自定義目錄中。為了更容易執行它,我編輯了我的 bashrc 以將所述目錄添加到我的路徑中:

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin

如果我想在沒有 sudo 的情況下執行程序,這很好用。但是,如果我嘗試使用 sudo 執行它,則會失敗並顯示“找不到命令”錯誤。

$ sudo godi_console
sudo: godi_console: command not found

使用 sudo 後檢查 PATH 變數顯示它不包括與普通使用者相同的 PATH:

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

為什麼PATH不一樣?難道我做錯了什麼?我在 Debian Jessie 上,如果它有所作為的話。

我嘗試的一件事是直接呼叫 /opt/godi/sbin/godi_console,將絕對路徑傳遞給執行檔。不幸的是,這在這種特殊情況下沒有幫助,因為 godi_console 本身取決於正確設置的 PATH 。

你總是可以這樣做:

sudo env "PATH=$PATH" godi_console

作為 Debian 上的一項安全措施,/etc/sudoerssecure_path選項設置為安全值。

注意:

sudo "PATH=$PATH" godi_console

Wheresudo將包含字元的前導參數=本身視為環境變數賦值,也可以在其環境中godi_consoleyour $PATH(而不是secure_path)一起執行,但不會影響sudo’ 執行檔的搜尋路徑,因此無助sudo於找到godi_console.

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