alv*_*rez 5 bash environment-variables pam-environment
我在网上看到其他人也有这个问题,但解决方案没有定论,所以我想再次引起注意。
根据 Ubuntu wiki 中的这个页面:https : //help.ubuntu.com/community/EnvironmentVariables 设置会话范围环境变量的推荐方法是修改 ~/.pam_environment。
这是我的目标:
这是我所做的。~/.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 程序也可以访问的会话范围环境变量的正确方法是什么?
wiki中的示例,用于通过 设置会话变量~/.pam_environment,在注释中指出:
用于修改 PATH 的语法(该语法与脚本文件不同)是变量扩展正常工作所必需的。
因此你的第一行应该是这样的:
ANDROID_HOME DEFAULT=${HOME}/Android/Sdk
Run Code Online (Sandbox Code Playgroud)