Bash

使用 shell 環境以非特權使用者身份執行腳本的某些部分

  • April 12, 2015

我正在創建一個設置機器的實例配置腳本。

我正在通過 sudo ie 執行腳本sudo run.sh。大多數步驟都需要 root 訪問權限,但某些腳本步驟不需要 root 訪問權限,我更喜歡以執行 sudo 的非特權使用者身份執行它們。

在使用 sudo 執行的腳本中,我正在嘗試做

sudo -i -u username sh -c 'echo $MY_ENV'

由於.bashrc包含export MY_ENV=something我希望上面的命令列印“某事”

如何在腳本內部臨時切換到其他使用者以執行包含使用者的 shell env 的命令?

.bashrc僅由互動式 shell 執行,而不是由腳本執行¹。這是定義環境變數的錯誤位置。請參閱是否有所有 shell 讀取的“.bashrc”等效文件?Ubuntu 維基

您可以告訴 bash.bashrc顯式讀取。當然,您必須執行bash,而不是sh可能是不同的外殼:

sudo -i -u username bash -c '. `~/.bashrc; echo "$MY_ENV"'

但這是一個壞主意,因為.bashrc文件可能包含假設它們在終端上執行並且花費時間設置鍵綁定、別名、提示等的東西。

理智的解決方案是將環境變數定義放在它們所屬的位置,在~/.profileor中~/.pam_environment

¹除非sshd出於某種奇怪的原因呼叫 bash。

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