我的 /etc/environment 文件有以下行:
BROKER_URL=tcp://xxx.30.8.163:61616
我运行这个并得到:
$ set|grep BROKER_URL
BROKER_URL=tcp://xxx.30.8.163:61616
然后,我运行:
$ sudo bash
# set|grep BROKER_URL
#
这应该是一个系统范围的环境变量。为什么它没有出现在我的 sudo shell 中?
答案1
/etc/environment
是一个文件由 PAM 使用,这意味着它是通过登录处理的,但sudo bash
不这样做,并且(来自man sudoers
):
命令环境
由于环境变量可以影响程序行为,因此 sudoers 提供了一种方法来限制要运行的命令继承用户环境中的哪些变量。 sudoers 有两种不同的方式来处理环境变量。
默认情况下,启用 env_reset 选项。这会导致命令在新的最小环境中执行。在 AIX 上(和Linux系统没有聚丙烯酰胺),环境使用 /etc/environment 文件的内容进行初始化。
请注意,大多数 GNU/linux 系统确实使用 PAM。您可以尝试sudo -i
使用登录 shell 来解决此问题。然而,这可能仍然不起作用,因为“登录 shell”指的是 bash 调用自身的方式,其中不包括 source /etc/environment
,并且您实际上并未通过 PAM 登录。
你最好的选择可能是配置须藤做你想做的事。