Bash
sudo su
後環境變數不可見
我在使用者的環境變數
user_a
設置.profile
:export NODE_ENV=dev
當我以使用者身份登錄並啟動 bash shell 時,如果環境變數設置正確。如果我這樣做,
echo $NODE_ENV
我會dev
按預期列印出來。如果我以其他使用者身份登錄
user_b
然後user_a
通過 command成為sudo su user_a
,則未設置環境變數。如何確保
NODE_ENV
設置了環境變數?
當您發出命令時,
su user
您將切換到使用者而不載入他們的整個配置文件。僅載入$HOME
、$SHELL
、$USER
和$LOGNAME
變數。為了在切換到它時載入使用者的整個配置文件,您必須使用--login
標誌指定您正在登錄使用者,該標誌在 su 之後有一個短劃線 (-
) 的快捷方式,因此您的命令看起來像su - user
.
您將必須添加
env_keep += "NODE_ENV"
到/etc/sudoers.d/
. 我建議這樣做:
- 執行
sudo -i
有一個 root shell 以防出現問題(我有一次把它搞砸了,修復起來真的很煩人)。- 在單獨的外殼中,執行
sudo visudo -f /etc/sudoers.d/envkeep
- 在該文件中,添加
Defaults env_keep += "NODE_ENV"
- 保存後退出試試
sudo -i
。它應該可以工作並將您放入NODE_ENV
應該保存的外殼中。