问题描述
什么是正确的地方:
-
全球环境变量意味着影响所有用户?
-
User-specific环境变量?
最佳解决方案
我认为this会帮助你理清
次佳解决方案
为了增加sagarchalise的答案,我可以总结链接建议的适当的设置位置。
对于全局设置,system-wide环境变量
-
使用
/etc/environment
-
不要使用
/etc/profile
或/etc/bash.bashrc
从页面:
/etc/environment
[…] is specifically meant for system-wide environment variable settings. It is not a script file, but rather consists of assignment expressions, one per line. Specifically, this file stores the system-wide locale and path settings.
使用/etc/profile
是一种非常方便的Unix-y方式,但在Ubuntu下它的功能大大降低。它的存在仅指向/etc/bash.bashrc
并从/etc/profile.d
收集条目。
在我的系统上,profile.d中唯一有趣的条目是/etc/profile.d/bash_completion.sh
。
对于本地或per-user设置
以前版本的Ubuntu页面推荐使用~/.pam_environment
,但该页面目前建议如果这不起作用,你应该使用
-
~/.profile
– 这可能是放置环境变量赋值的最佳文件,因为它在启动过程桌面会话期间由DisplayManager自动执行,并且当文本控制台中有一个logs-in时由登录shell执行。 -
~/.bash_profile
或~./bash_login
– 如果其中一个存在,当bash作为登录shell启动时,bash会执行它而不是~/.profile
。 Bash更喜欢~/.bash_profile
和~/.bash_login
。 […]默认情况下,这些文件不会影响图形会话。“ -
~/.bashrc
– “……可能是最容易设置变量的地方”。
第三种解决方案
你有:
/etc/profile: system-wide .profile file for the Bourne shell (sh(1)) and Bourne compatible shells (bash(1), ksh(1), ash(1), …).
在Lucid和Maverick中
/etc/profile.d/*.sh
如果存在,如果用户的shell是bash:
/etc/bash.bashrc
对于用户环境,存在一个特定于shell的混乱数组,以及它是否被视为”login 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,我甚至不打算尝试to make sense of this。
第四种方案
按照https://help.ubuntu.com/community/EnvironmentVariables的建议:
-
旨在影响所有用户的全局环境变量应该在
/etc/environment
中。 -
应在
~/.pam_environment
中设置User-specific环境变量。
避免使用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) wrote on 2010-08-19:
This seems to be an issue with encrypted home directories. I added
session required pam_env.so
at the end of /etc/pam.d/common-session and now ~/.pam_environment gets read. On another system without encrypted home directories (also 10.04) the work around is not needed. Perhaps in my case the system tries to read ~/.pam_environment before it is decrypted.
改编自我对超级用户的回答:https://superuser.com/a/408373/66856