什么是正确的地方:
我认为 关于环境变量的社区维基页面 会帮助你理清
为了增加sagarchalise的答案,我可以总结链接建议的适当的设置位置。
/etc/environment
/etc/profile
或/etc/bash.bashrc
从页面:
/etc/environment
[...]专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由赋值表达式组成,每行一个。具体来说,此文件存储系统范围的区域设置和路径设置。
使用/etc/profile
是一种非常方便的方法,但在Ubuntu下它的功能大大减少了。它仅存在于指向/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
。这个解决方案显然适用于早期版本,但我还没有测试过。
这似乎是加密主目录的问题。我补充道
会话需要pam_env.so
在/etc/pam.d/common-session结束时,现在〜/ .pam_environment被读取。在没有加密主目录(也是10.04)的另一个系统上,不需要解决方法。也许在我的情况下,系统在解密之前尝试读取〜/ .pam_environment。
改编自我对超级用户的回答: https://superuser.com/a/408373/66856