在 /etc/environment 中设置变量无效

在 /etc/environment 中设置变量无效

我的 中有以下内容/etc/environment

http_proxy=http://myproxy.net:12345

重新启动机器后,我登录并检查变量:

root@d6c44fa03243:/# echo $http_proxy
(empty)

为什么变量未设置?

注意:我必须提到这是一个 docker 容器,尽管我不明白为什么它会有所不同。

编辑

有关该系统的更多详细信息(Ubuntu 16.04.4 Xenial Xerus):

root@d6c44fa03243:/# uname -a
Linux d6c44fa03243 4.4.0-116-generic #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

root@d6c44fa03243:/# cat /etc/issue
Ubuntu 16.04.4 LTS \n \l

编辑2

根据Ubuntu 文档

/etc/环境

此文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由每行一个赋值表达式组成。

答案1

我在 Ubuntu 18.04 上遇到过这个问题。我/etc/environment根本无法工作,但改用了一个脚本/etc/profile.d/(如文档所述这里), 然后做过工作。

有关详细信息,请参阅For more info, see我的答案这个相关问题。 希望能帮助到你 :)

答案2

由于 UNIX 工具构建于透明度(ch6)记住,您可以借助 找到答案grep。无论您使用的是完整的操作系统还是容器,都没有关系(后者只是意味着您可能需要采取一些额外的步骤来安装所需的工具,以使事情变得透明)。

检查您grep的操作系统是否已安装并运行sudo grep -R "/etc/environment" /etc/*。这将搜索所有系统脚本和配置,以查看哪些使用此文件。在默认的 ubuntu/xenial64 vagrant box 上,使用此文件的脚本和配置主要集中在/etc/init.d/ /etc/pam.d/、和/etc/rc.*.d/

以下配置是如何在/etc/environment我的 shell 中设置变量的:

/etc/pam.d/su
/etc/pam.d/sshd

man pam_env

pam_env PAM 模块允许设置(取消)环境变量。...

此模块还可以解析在单独行上有简单 KEY=VAL 对的文件(默认情况下为 /etc/environment)。您可以使用 envfile 标志更改要解析的默认文件,并通过将 readenv 标志分别设置为 1 或 0 来打开或关闭它。...

在您的 docker 容器上进行类似的搜索。您可以检查您的容器是否使用pam_env.so

最有可能的最佳解决方案是让您的启动过程创建环境变量,/etc/environment但该建议是在不了解您正在构建什么的情况下给出的。`/etc/rc*.d/ 中的用法可能是如何实现这一点的很好的例子。

大多数人遵循@ben-njeri的建议,在默认配置文件中设置变量bash shell

答案3

每当启动新 shell 时,配置/etc/profile~/.bashrc~/.bash_profile文件以导出变量。

/etc/profile是针对系统范围的,其他的是针对特定用户的。

只需在最后添加如下几行:

export http_proxy=”http://myproxy.net:12345”
export ftp_proxy=”http://myproxy.net:12345”
export https_proxy=”http://myproxy.net:12345"

因此,每次启动 shell 时,变量都会被加载并且您可以使用它们。

相关内容