在* / etc / environment中引用环境变量*?
我最近发现了/etc/environment
,这似乎是设置简单环境变量比脚本更标准的方法,但我想知道是否有办法在/ etc / environment文件中反向引用环境变量。
也就是说,我有这个:
JAVA_HOME="/tools/java" GRAILS_HOME="/tools/grails" GROOVY_HOME="/tools/groovy" GRADLE_HOME="/tools/gradle" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
但是,如果我尝试将$JAVA_HOME/bin
添加到PATH定义中,则会得到$ JAVA_HOME / bin,而不是插值变量。 为了解决这个问题,我在profile.d中创建了environment.sh,将/bin
条目添加到路径中,但这看起来很邋and且杂乱无章。
有没有办法在/ etc / environment中反向引用环境变量?
/etc/environment
文件由pam_env
PAM模块读取。 它只支持简单的键值对,右侧没有替换。
如果要使用替换或其他shell扩展来构建值,则需要通过shell。 /etc/profile
(或/etc/profile.d
中的/etc/profile.d
)是这些的正确位置。 这是传统的地方( /etc/environment
是一个相对较新的创新,在unix系统的历史中),并且使用它当然没有任何草率。 /etc/environment
的主要好处是它允许使用不涉及shell的登录方法或使用非Bourne shell的用户设置环境变量,但这些在实践中并不常见。
Ubuntu文档使这看起来不可能。 但是,有一个答案。
解答 :在/etc/.bashrc
创建持久的系统范围环境变量
JAVA_HOME="/tools/java" ... PATH="$JAVA_HOME:$PATH"
细节:
以下是Environment Variables文档中的更多详细信息。
正如您所尝试的那样,官方建议使用/etc/environment
。 问题是这个文件不是脚本文件。 换句话说,您不能在变量声明中使用变量。
文档继续使用另外两个“不推荐”文件
/etc/profile
和/etc/bash.bashrc
。
/etc/profile
“只是调用/etc/bash.bashrc文件”。 所以改为选择
/etc/bash.bashrc
因为“每当用户进入shell或桌面环境时,默认情况下都会配置Ubuntu来执行此文件。”