引用环境变量 *in* /etc/environment?

Ste*_*all 21 configuration environment-variables

我最近发现/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"
Run Code Online (Sandbox Code Playgroud)

$JAVA_HOME/bin但是,如果我尝试添加到 PATH 定义中,则会得到 $JAVA_HOME/bin,而不是内插变量。为了解决这个问题,我在 profile.d 中创建了 environment.sh 以将/bin条目添加到路径中,但这似乎草率且杂乱无章。

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

Gil*_*il' 14

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

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