哪些位置是正确的:
- 全局环境变量是否会影响所有用户?
- 用户特定的环境变量?
答案1
为了补充 sagarchalise 的回答,我可以总结一下链接所建议的适合设置的地方。
对于全局设置,系统范围的环境变量
- 使用
/etc/environment
- 不要使用
/etc/profile
或/etc/bash.bashrc
从页面:
/etc/environment
[...] 专门用于系统范围的环境变量设置。它不是脚本文件,而是由每行一个赋值表达式组成。具体来说,此文件存储系统范围的区域设置和路径设置。
使用/etc/profile
是一种非常 Unix 式的方法,但在 Ubuntu 下其功能大大减弱。它的存在只是为了指向/etc/bash.bashrc
并收集来自 的条目/etc/profile.d
。
在我的系统上,profile.d 中唯一有趣的条目是/etc/profile.d/bash_completion.sh
。
对于本地或每个用户的设置
Ubuntu 页面推荐~/.pam_environment
,由PAM 系统当您的会话启动时(TTY、GUI、SSH 等)。它相当于用户/etc/environment
,使用相同的语法。如果不起作用,链接会建议替代方案:
~/.profile
对于大多数 shell 来说。显示管理器也可以将此文件应用于您的 GUI 会话,但对于所有显示管理器或显示服务器(X11 与 Wayland)或会话,情况不一定如此。
特定于 bash 的:
~/.bash_profile
或~./bash_login
- 如果其中一个存在,则 bash 将执行它,而不是~/.profile
在 bash 作为登录 shell 启动时执行。Bash 将更喜欢~/.bash_profile
。~/.bash_login
[...] 默认情况下,这些文件不会影响图形会话。"~/.bashrc
—“...可能是设置变量最容易的地方”。
答案2
我认为社区 wiki 页面上的环境变量将帮助你理清
答案3
你有:
/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,我甚至不会尝试理解这一点。
答案4
根据建议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 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