当前位置: 首页>>技术教程>>正文


configuration – 引用环境变量*在*/etc/environment 中?

,

问题描述

我最近发现了 /etc/environment ,这似乎是比脚本更标准的设置简单环境变量的方法,但我想知道 /etc/environment 文件中是否有办法设置 back-reference 环境变量。

也就是说,我有这个:

JAVA_HOME="/tools/java"
GRAILS_HOME="/tools/grails"
GROOVY_HOME="/tools/groovy"
GRADLE_HOME="/tools/gradle"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

但是,如果我尝试将 $JAVA_HOME/bin 添加到 PATH 定义中,我会得到 $JAVA_HOME/bin,而不是插值变量。为了解决这个问题,我在 profile.d 中创建environment.sh以将/bin条目添加到路径中,但这看起来很草率且杂乱无章。

有没有办法反向引用 /etc/environment 中的环境变量?

最佳方法

/etc/environment 文件由 pam_env PAM 模块读取。仅支持简单的键值对,right-hand 端不进行替换。

如果您想通过替换或其他 shell 扩展来构建值,则需要通过 shell。 /etc/profile (或 /etc/profile.d 中的文件)是放置这些的正确位置。这是传统的地方(/etc/environment 是 unix 系统历史上相对较新的创新),使用它当然不能马虎。 /etc/environment 的主要好处是,即使使用不涉及 shell 的登录方法或使用非 Bourne shell 的用户,它也允许设置环境变量,但这些在实践中并不常见。

次佳方法

Ubuntu 文档让这看起来不可能。但是,有一个答案。

答案:在 /etc/.bashrc 中创建持久的系统范围环境变量

JAVA_HOME="/tools/java"
...
PATH="$JAVA_HOME:$PATH"  

详细信息:\n以下是 Environment Variables documentation 的更多详细信息。\n官方建议使用 /etc/environment ,正如您所尝试的那样。问题是这个文件不是脚本文件。换句话说,不能在变量声明中使用变量。

该文档继续提供另外 2 个 “Not Recommended” 文件\n /etc/profile/etc/bash.bashrc

/etc/profile“只不过是调用 /etc/bash.bashrc 文件”。所以改为选择

/etc/bash.bashrc,因为“Ubuntu 默认配置为在用户进入 shell 或桌面环境时执行此文件。”

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14353.html,未经允许,请勿转载。