我的 中有以下内容/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
答案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 时,变量都会被加载并且您可以使用它们。