Ubuntu 错误?仅在以 root 身份登录后的环境变量

Ubuntu bug? Environment variables only after logging as root

我有一个经常使用的 IP 地址,所以我在安装 Ubuntu 后尝试将其设置为环境变量。我编辑了 /etc/environment 并为我的 api 令牌和我的 IP 地址添加了几行。它看起来像这样:

PATH="some/paths"
TOKEN="my:token"
ZRUS="my.ip.address"

现在,如果我想访问 IP,理论上我会这样做 ssh $ZRUS。但是,它不起作用;我执行 echo $ZRUS 并得到一个空行,所以我执行 printenv 并获得所有环境变量的列表,但我在那里看不到我的 IP。然后我执行 su root 并再次执行 printenv,我得到相同的列表加上 IP 地址和令牌。然后我做了 su myuserecho $ZRUS 并且 IP 神奇地工作了。

现在我想知道为什么我必须先以 root 身份登录才能让我的全局环境变量在本地用户中工作。似乎范围根据 root 是否已经开始会话而有所不同,这对我来说似乎很奇怪。

你们认为这是错误还是功能?你会如何克服这个问题?

在环境文件 /etc/environment 中设置的环境变量只有在您将它们读入活动 shell source /etc/environment 或您 logout/login 时才会生效(这将重新将环境文件读入您​​的活动 shell).

su myuser 的行为本质上是为您的当前用户创建一个新的 shell,它会重新读取环境文件