使用 $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
但是我没有得到我期望的结果:
~$ 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
答案1
我没有找到太多关于 的文档/etc/environment
,但事情没有按预期工作的原因在于它“不是脚本文件”,因此不会被 shell 处理,因此引用先前定义的变量不起作用。这解释了您看到的行为。
您最好在您的家中、在.profile
或中定义这些类型的环境变量.bashrc
,或者,如果您需要所有用户在/etc/profile.d
或中定义这些类型的环境变量/etc/bash.bashrc
。
关于设置环境变量有一些相当详尽的文档这里,并且它指向.profile
或.bashrc
作为放置这些内容的首选位置。
答案2
您所寻求的信息的权威来源(至少对于使用 SystemD 的 Debian 版本及其衍生版本,例如现代版本的 Ubuntu)是environment.d(5)
(为了清晰起见,我自行更改了此摘录中的一些格式):
配置格式
配置文件包含环境变量赋值列表
KEY=VALUE
,以换行符分隔。这些赋值的右侧可以使用${OTHER_KEY}
和$OTHER_KEY
格式引用先前定义的环境变量。也可以使用${FOO:-DEFAULT_VALUE}
以与相同的方式扩展,${FOO}
除非扩展为空,在这种情况下它会扩展为DEFAULT_VALUE
,并使用${FOO:+ALTERNATE_VALUE}
扩展为ALTERNATE_VALUE
只要${FOO}
会扩展为非空值。不支持其他 shell 语法元素。每个变量名都
KEY
必须是有效的变量名。空行和以注释字符开头的行将#
被忽略。例子
示例 1. 设置环境以允许访问安装在
/opt/foo
/etc/environment.d/60-foo.conf
:–FOO_DEBUG=force-software-gl,log-verbose PATH=/opt/foo/bin:$PATH LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}
答案3
您可以使用指针,/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"
{}
引用另一个变量赋值时,使用花括号括住变量名。因此,不要$JAVA_HOME
使用 ,而要使用${JAVA_HOME}
。似乎还需要在指向其他变量的变量值周围加上引号:
所以PATH="... ${SOME_VAR} ..."
答案4
Ubuntu 文档让这看起来不可能。但是,有一个答案。
回答:在以下位置创建持久的系统范围环境变量/etc/bash.bashrc
JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"
细节:
我对此发表了一个更长的答案AskUbuntu 问题