/etc/environment 中带有 $ 语法的“指针”

Tys*_*ann 6 paths environment-variables etc

使用 $FOO 语法在 /etc/environment 中有“指针”是否有效?现在我的 /etc/environment 看起来像这样:

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
MAVEN_HOME=/usr/bin/apache-maven/apache-maven-3.0.4
M2_HOME=$MAVEN_HOME
M2=$MAVEN_HOME/bin
PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$JAVA_HOME/bin:$MAVEN_HOME/bin
Run Code Online (Sandbox Code Playgroud)

我没有得到我期望的结果:

~$ echo $JAVA_HOME
/usr/lib/jvm/java-6-openjdk
~$ echo $MAVEN_HOME
/usr/bin/apache-maven/apache-maven-3.0.4
~$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/bin:/usr/games:$JAVA_HOME/bin:$MAVEN_HOME/bin
Run Code Online (Sandbox Code Playgroud)

roa*_*dmr 7

我没有找到太多关于 的文档/etc/environment,但事情不像你期望的那样工作的原因是它“不是一个脚本文件”,因此没有被 shell 处理,所以引用以前定义的变量不会工作。这解释了您所看到的行为。

您最好在家中定义这些类型的环境变量,在.profile或 中.bashrc,或者如果您需要为所有用户使用它们,则在/etc/profile.d或 中/etc/bash.bashrc

有一个关于设置环境变量的一些非常广泛的文件在这里,它指向要么.profile.bashrc才能把这个东西的首选之地。

  • 谢谢回复。从您引用的帖子中可以看出:“影响整个系统(而不是特定用户)的环境变量设置不应放置在系统或桌面会话时执行的许多系统级脚本中的任何一个中已加载,但进入 /etc/environment - 该文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由赋值表达式组成,每行一个。具体来说,该文件存储系统范围的环境变量区域设置和路径设置。” 那个指导不正确吗? (2认同)