我最近发现了/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_env
PAM 模块。它仅支持简单的键值对,右侧没有替换。
如果您想要使用替换或其他 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 或桌面环境时执行此文件。”