Bash

sudo su 後環境變數不可見

  • May 1, 2018

我在使用者的環境變數user_a設置.profileexport 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/. 我建議這樣做:

  1. 執行sudo -i有一個 root shell 以防出現問題(我有一次把它搞砸了,修復起來真的很煩人)。
  2. 在單獨的外殼中,執行sudo visudo -f /etc/sudoers.d/envkeep
  3. 在該文件中,添加Defaults env_keep += "NODE_ENV"
  4. 保存後退出試試sudo -i。它應該可以工作並將您放入NODE_ENV應該保存的外殼中。

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