user_a
我在用户的环境变量设置.profile
:
export NODE_ENV=dev
当我以用户身份登录并启动 bash shell 时,如果环境变量设置正确。如果我这样做,echo $NODE_ENV
我就会dev
按预期打印出来。
如果我以其他用户身份登录user_b
然后user_a
通过命令变为sudo su user_a
,则不会设置环境变量。
如何确保环境变量NODE_ENV
已设置?
答案1
当您发出命令时,su user
您将切换到该用户,而无需加载其整个配置文件。仅加载$HOME
、$SHELL
、$USER
和变量。$LOGNAME
为了在切换到用户时加载用户的整个配置文件,您必须使用该--login
标志指定您正在登录该用户,该标志的快捷方式是 su 后面的一个破折号 ( -
),因此您的命令将类似于su - user
。
答案2
您必须添加env_keep += "NODE_ENV"
到/etc/sudoers.d/
.我建议按如下方式进行:
- 运行
sudo -i
一个 root shell,以防出现问题(我有一次搞砸了,修复起来真的很烦人)。 - 在单独的 shell 中,执行
sudo visudo -f /etc/sudoers.d/envkeep
- 在该文件中,添加
Defaults env_keep += "NODE_ENV"
- 保存后退出再尝试
sudo -i
。它应该可以工作并把你放在一个NODE_ENV
应该被保存的外壳中。