bel*_*qua 82
为了补充 sagarchalise 的答案,我可以总结一下链接建议的适当设置位置。
/etc/environment /etc/profile或/etc/bash.bashrc从页面:
/etc/environment[...] 专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由赋值表达式组成,每行一个。具体来说,此文件存储系统范围的区域设置和路径设置。
使用/etc/profile是一种非常 Unix-y 的方式,但它的功能在 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对于大多数贝壳。该文件也可以通过显示管理器应用于您的 GUI 会话,但不必适用于所有显示管理器或显示服务器(X11 与 Wayland)或会话。和 bash 特定的:
~/.bash_profile或者~./bash_login- 如果其中之一存在,bash 会执行它,而不是~/.profile在 bash 作为登录 shell 启动时执行它。bash将喜欢~/.bash_profile到 ~/.bash_login。[...] 默认情况下,这些文件不会影响图形会话。”~/.bashrc - “...可能是设置变量最简单的地方”。 sag*_*ise 17
我认为关于环境变量的社区维基页面将帮助您理清
你有:
/etc/profile:用于 Bourne shell (sh(1)) 和 Bourne 兼容 shell(bash(1)、ksh(1)、ash(1)、...)的系统范围的 .profile 文件。
在 Lucid 和 Maverick 中运行
/etc/profile.d/*.sh
Run Code Online (Sandbox Code Playgroud)
如果存在,并且用户的 shell 是 bash:
/etc/bash.bashrc
Run Code Online (Sandbox Code Playgroud)
对于用户环境,有一个特定于 shell 的令人困惑的数组,以及它是否被认为是“登录 shell”。如果外壳是 bash:
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
Run Code Online (Sandbox Code Playgroud)
对于 sh/破折号:
$HOME/.profile
Run Code Online (Sandbox Code Playgroud)
对于 zsh,我什至不会试图理解这一点。
正如https://help.ubuntu.com/community/EnvironmentVariables推荐的那样:
旨在影响所有用户的全局环境变量应该进入/etc/environment.
用户特定的环境变量应在~/.pam_environment.
避免使用配置文件和 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
Run Code Online (Sandbox Code Playgroud)
为什么是丑陋的静态路径?${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