如何设置会话范围的环境变量和 PATH?

alv*_*rez 5 bash environment-variables pam-environment

我在网上看到其他人也有这个问题,但解决方案没有定论,所以我想再次引起注意。

根据 Ubuntu wiki 中的这个页面:https : //help.ubuntu.com/community/EnvironmentVariables 设置会话范围环境变量的推荐方法是修改 ~/.pam_environment。

这是我的目标:

  1. 我想创建一个环境变量 ANDROID_HOME,它会将我的主文件夹中某个位置的路径作为值。
  2. 我想将两个文件夹添加到 PATH。

这是我所做的。~/.pam_environment 文件不存在,所以我创建了它并向其中添加了以下几行:

ANDROID_HOME=${HOME}/Android/Sdk
PATH DEFAULT=${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
Run Code Online (Sandbox Code Playgroud)

注销并重新登录。

结果出乎意料。我打开终端并回显 $ANDROID_HOME 这就是我得到的:

${HOME}/Android/Sdk
Run Code Online (Sandbox Code Playgroud)

看起来${HOME}没有被我的主文件夹路径替换。为什么呢?

观察cd-ing 到 $ANDROID_HOME(Android/Sdk 实际上存在于我的主文件夹中):

anvar@crazymachine:~$ cd $ANDROID_HOME
bash: cd: ${HOME}/Android/Sdk: No such file or directory
Run Code Online (Sandbox Code Playgroud)

还回显 $PATH 给了我这个:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:${HOME}/Android/Sdk/tools:${HOME}/Android/Sdk/platform-tools
Run Code Online (Sandbox Code Playgroud)

为什么变量没有用它们的值替换,就像逻辑上假设的那样,尤其是当上述站点中的示例给人的印象是变量可以在值中使用时?

设置 GUI 程序也可以访问的会话范围环境变量的正确方法是什么?

Gun*_*son 3

wiki中的示例,用于通过 设置会话变量~/.pam_environment,在注释中指出:

用于修改 PATH 的语法(该语法与脚本文件不同)是变量扩展正常工作所必需的。

因此你的第一行应该是这样的:

ANDROID_HOME DEFAULT=${HOME}/Android/Sdk
Run Code Online (Sandbox Code Playgroud)