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 myuser
和 echo $ZRUS
并且 IP 神奇地工作了。
现在我想知道为什么我必须先以 root 身份登录才能让我的全局环境变量在本地用户中工作。似乎范围根据 root 是否已经开始会话而有所不同,这对我来说似乎很奇怪。
你们认为这是错误还是功能?你会如何克服这个问题?
在环境文件 /etc/environment
中设置的环境变量只有在您将它们读入活动 shell source /etc/environment
或您 logout/login 时才会生效(这将重新将环境文件读入您的活动 shell).
su myuser
的行为本质上是为您的当前用户创建一个新的 shell,它会重新读取环境文件
我有一个经常使用的 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 myuser
和 echo $ZRUS
并且 IP 神奇地工作了。
现在我想知道为什么我必须先以 root 身份登录才能让我的全局环境变量在本地用户中工作。似乎范围根据 root 是否已经开始会话而有所不同,这对我来说似乎很奇怪。
你们认为这是错误还是功能?你会如何克服这个问题?
在环境文件 /etc/environment
中设置的环境变量只有在您将它们读入活动 shell source /etc/environment
或您 logout/login 时才会生效(这将重新将环境文件读入您的活动 shell).
su myuser
的行为本质上是为您的当前用户创建一个新的 shell,它会重新读取环境文件