我正在尝试引入一个变量并将其添加到 ubuntu 10.04 中的全局路径中。根据官方文档,/etc/environment 是正确的位置。以下是我的示例:
GRADLE_HOME=/etc/gradle-0.9-preview-3
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$GRADLE_HOME/bin"
GRADLE_HOME 变量已添加到环境中,但在 PATH 分配期间它不会解释 $GRADLE_HOME 变量。对其进行硬编码可以正常工作。没什么大不了的,但我想知道是否支持变量替换,或者是否有更好的方法来实现这一点?谢谢!
答案1
相关帖子中的解释似乎提供了答案:
因为 /etc/environment 不是 shell 脚本。它是执行环境变量扩展的 shell。PAM 模块 pam_env 读取 /etc/environment - 并将其视为 KEY=VAL 对的简单列表并相应地设置环境。它没有用于执行变量扩展的语言。
答案2
阅读 pam_env.conf(5) 手册页。
我相信您需要在右侧的变量名周围添加花括号:
GRADLE_HOME=/etc/gradle-0.9-preview-3
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${GRADLE_HOME}/bin"
(可能不存在的)环境变量可以在使用 ${string} 语法的值中使用,(可能不存在的)PAM_ITEM 可以在使用 @{string} 语法的值中使用。$ 和 @ 字符都可以使用反斜杠转义以用作文字值,值可以用“”分隔,不支持转义的“”。请注意,在调用模块时,您可能尚未设置许多您想要使用的环境变量。例如,下面多次使用了 HOME,但许多 PAM 应用程序在您需要它时不会使其可用。