/etc/environment 中未发生变量扩展

/etc/environment 中未发生变量扩展

我更改了/etc/environment以向变量添加更多目录PATH。但看起来$PATH双引号中的内容没有扩展,我可以从 shell 中找到任何命令并/usr/bin/command-not-found运行。

$ cat /etc/environment 
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
PATH="$PATH:/home/user/technical/java/maven/bin"
JAVA_HOME="/home/user/technical/java/jdk7"

所以从tty,

$ echo $PATH
$PATH:/home/user/technical/java/maven/bin

为什么扩张没有发生?

答案1

/etc/environment 与 shell 无关。这意味着它不依赖于任何方式,例如 bash扩张

您只能key=value在此处使用简单的分配。

答案2

/etc/environment文件来自Linux-PAM 项目并且不是 shell 脚本。由于 shell 和 PAM 都不对此文件执行变量扩展,因此变量的值将按照写入文件时的方式进行分配。

文件/etc/environment已记录按项目:

/etc/environment文件指定要设置的环境变量。该文件必须由NAME=VALUE单独行上的简单对组成。模块pam_env(8)将在文件之后读取该文件pam_env.conf

/etc/security/pam_env.conf文件也不是 shell 脚本,但它支持使用语法引用其他变量的方式${variable}。它还支持两个特殊表达式@{HOME}@{SHELL}并将用从用户passwd条目中读取的适当值替换它们。

请注意,在此文件中定义变量的语法与 shell 脚本中不同:

VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]]

有关更多信息,请参阅上面链接中的文档。

相关内容