在哪里声明环境变量?
什么是正确的地方:
- 全球环境变量意味着影响所有用户?
- 用户特定的环境变量?
我想这会帮助你理清
为了增加sagarchalise的答案,我可以总结链接建议的适当的设置位置。
对于全局设置,系统范围的环境变量
- 使用
/etc/environment
- 不要使用
/etc/profile
或/etc/bash.bashrc
从页面:
/etc/environment
[…]专门用于系统范围的环境变量设置。 它不是一个脚本文件,而是由赋值表达式组成,每行一个。 具体来说,此文件存储系统范围的区域设置和路径设置。
使用/etc/profile
是一种非常方便的方法,但在Ubuntu下它的function大大减少了。 它的存在只是指向/etc/bash.bashrc
并从/etc/profile.d
收集条目。
在我的系统上,profile.d中唯一有趣的条目是/etc/profile.d/bash_completion.sh
。
对于本地或每用户设置
以前版本的Ubuntu页面推荐了~/.pam_environment
,但是当前页面建议如果这不起作用,你应该使用
-
~/.profile
– 这可能是放置环境变量赋值的最佳文件,因为它在启动过程桌面会话期间由DisplayManager自动执行,并且当从文本控制台登录时由登录shell执行。 -
~/.bash_profile
或~./bash_login
– 如果存在其中一个,当bash作为登录shell启动时,bash会执行它而不是~/.profile
。 Bash会更喜欢~/.bash_profile
到~/.bash_login
。 […]默认情况下,这些文件不会影响图形会话。“ -
~/.bashrc
– “……可能是最容易设置变量的地方”。
你有:
/ etc / profile:Bourne shell(sh(1))和Bourne兼容shell(bash(1),ksh(1),ash(1),…)的系统范围.profile文件。
在Lucid和Maverick中
/etc/profile.d/*.sh
如果存在,如果用户的shell是bash:
/etc/bash.bashrc
对于用户环境,存在一个特定于shell的令人困惑的数组,以及它是否被视为“登录shell”。 如果shell是bash:
~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup file
对于sh / dash:
$HOME/.profile
对于zsh,我甚至都不打算尝试理解这一点 。
按照https://help.ubuntu.com/community/EnvironmentVariables上的建议:
-
旨在影响所有用户的全局环境变量应该放在
/etc/environment
。 -
用户特定的环境变量应在
~/.pam_environment
设置。
避免使用profile和rc文件在Ubuntu上设置环境变量。 他们让我比头脑更值得头疼。
说起来容易做起来难,但是;)
您可能遇到与我相同的配置差距。 请参阅下面的加密主页解决方法。
我的~/.pam_environment
:
PATH DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin IDEA_JDK DEFAULT=${HOME}/Applications/jdk
为什么丑陋的静态路径? ${PATH}
对我不起作用。 我多次尝试解决登录问题,因此我坚持使用默认的丑陋静态副本:)
加密的主文件夹的解决方法
在Ubuntu版本中包括Precise 12.04 Beta 2,如果您使用的是加密的主目录,则需要修改/etc/pam.d/common-session
以使其加载~/.pam_environment
。 这个解决方案显然适用于早期版本,但我还没有测试过。
Guenther Montag(g-montag)在2010-08-19写道:
这似乎是加密主目录的问题。 我补充道
会话需要pam_env.so
在/etc/pam.d/common-session结束时,现在〜/ .pam_environment被读取。 在没有加密主目录(也是10.04)的另一个系统上,不需要解决方法。 也许在我的情况下,系统在解密之前尝试读取〜/ .pam_environment。
改编自我对超级用户的回答: https : //superuser.com/a/408373/66856