`sudo su` 之后环境变量不可见

`sudo su` 之后环境变量不可见

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/.我建议按如下方式进行:

  1. 运行sudo -i一个 root shell,以防出现问题(我有一次搞砸了,修复起来真的很烦人)。
  2. 在单独的 shell 中,执行sudo visudo -f /etc/sudoers.d/envkeep
  3. 在该文件中,添加Defaults env_keep += "NODE_ENV"
  4. 保存后退出再尝试sudo -i。它应该可以工作并把你放在一个NODE_ENV应该被保存的外壳中。

相关内容