Bash
使用 shell 環境以非特權使用者身份執行腳本的某些部分
我正在創建一個設置機器的實例配置腳本。
我正在通過 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
文件可能包含假設它們在終端上執行並且花費時間設置鍵綁定、別名、提示等的東西。理智的解決方案是將環境變數定義放在它們所屬的位置,在
~/.profile
or中~/.pam_environment
。¹除非
sshd
出於某種奇怪的原因呼叫 bash。