引用 /etc/environment 中的环境变量?

引用 /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到路径中,但这似乎很草率和混乱。

有没有办法反向引用 /etc/environment 中的环境变量?

答案1

/etc/environment文件由pam_envPAM 模块。它仅支持简单的键值对,右侧没有替换。

如果您想要使用替换或其他 shell 扩展来构建值,则需要通过 shell。/etc/profile(或 中的文件/etc/profile.d)是放置这些的正确位置。 这是传统位置(/etc/environment是 unix 系统历史上相对较新的创新),使用它绝对没有什么可挑剔的。 的主要好处/etc/environment是它允许设置环境变量,即使使用不涉及 shell 的登录方法或使用非 Bourne shell 的用户也是如此,但这些在实践中并不常见。

答案2

Ubuntu 文档让这看起来不可能。但是,有一个答案。

回答:在以下位置创建持久的系统范围环境变量/etc/.bashrc

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

细节:
以下是环境变量文档
官方建议使用/etc/environment,正如你尝试过的。问题是这个文件不是脚本文件。换句话说,你不能在变量声明中使用变量。

该文档继续包含另外 2 个“不推荐”的文件
/etc/profile/etc/bash.bashrc

/etc/profile“只不过调用 /etc/bash.bashrc 文件而已”。因此,请选择

/etc/bash.bashrc因为“Ubuntu 默认配置为每当用户进入 shell 或桌面环境时执行此文件。”

相关内容