我更改了/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]]
有关更多信息,请参阅上面链接中的文档。