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