配置格式

配置格式

使用 $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 问题

相关内容