Ivan Asked: 2010-09-24 19:39:43 +0800 CST2010-09-24 19:39:43 +0800 CST 2010-09-24 19:39:43 +0800 CST 在哪里声明环境变量? 772 什么是正确的地方: 全局环境变量意味着影响所有用户? 用户特定的环境变量? command-line environment-variables 4 个回答 Voted belacqua 2011-02-15T13:32:10+08:002011-02-15T13:32:10+08:00 为了添加到 sagarchalise 的答案,我可以总结链接建议的适当设置位置。 对于全局设置,系统范围的环境变量 利用/etc/environment 不要使用/etc/profile或/etc/bash.bashrc 从页面: /etc/environment[...] 专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由赋值表达式组成,每行一个。具体来说,此文件存储系统范围的区域设置和路径设置。 Using/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- “...可能是最容易设置变量的地方”。 Best Answer sagarchalise 2010-09-24T19:49:10+08:002010-09-24T19:49:10+08:00 我认为关于环境变量的社区 wiki 页面将帮助您解决 msw 2010-09-24T19:53:45+08:002010-09-24T19:53:45+08:00 你有: /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”。如果外壳是 bash: ~/.bash_profile The personal initialization file, executed for login shells ~/.bashrc The individual per-interactive-shell startup file 对于 sh/dash: $HOME/.profile 对于 zsh,我什至不会尝试理解这一点。 Alain O'Dea 2012-04-04T20:16:29+08:002012-04-04T20:16:29+08:00 正如https://help.ubuntu.com/community/EnvironmentVariables上的建议: 旨在影响所有用户的全局环境变量应该进入/etc/environment. 用户特定的环境变量应设置在~/.pam_environment. 避免在 Ubuntu 上设置环境变量的配置文件和 rc 文件。他们给我带来的头痛比他们的价值还多。 然而,这说起来容易做起来难;) 您可能会遇到与我相同的配置差距。请参阅下面的加密主页的解决方法。 我的~/.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}对我不起作用。我多次尝试解决登录问题,所以我坚持使用丑陋的默认静态副本:) 加密主文件夹的解决方法 在 Precise 12.04 Beta 2 及之前的 Ubuntu 版本中,如果您使用加密的主目录,则需要对其进行修改/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
为了添加到 sagarchalise 的答案,我可以总结链接建议的适当设置位置。
对于全局设置,系统范围的环境变量
/etc/environment
/etc/profile
或/etc/bash.bashrc
从页面:
Using
/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
- “...可能是最容易设置变量的地方”。我认为关于环境变量的社区 wiki 页面将帮助您解决
你有:
在 Lucid 和 Maverick 中运行
如果存在,并且用户的 shell 是 bash:
对于用户环境,有一个特定于 shell 的令人困惑的数组,以及它是否被视为“登录 shell”。如果外壳是 bash:
对于 sh/dash:
对于 zsh,我什至不会尝试理解这一点。
正如https://help.ubuntu.com/community/EnvironmentVariables上的建议:
旨在影响所有用户的全局环境变量应该进入
/etc/environment
.用户特定的环境变量应设置在
~/.pam_environment
.避免在 Ubuntu 上设置环境变量的配置文件和 rc 文件。他们给我带来的头痛比他们的价值还多。
然而,这说起来容易做起来难;)
您可能会遇到与我相同的配置差距。请参阅下面的加密主页的解决方法。
我的
~/.pam_environment
:为什么丑陋的静态路径?
${PATH}
对我不起作用。我多次尝试解决登录问题,所以我坚持使用丑陋的默认静态副本:)加密主文件夹的解决方法
在 Precise 12.04 Beta 2 及之前的 Ubuntu 版本中,如果您使用加密的主目录,则需要对其进行修改
/etc/pam.d/common-session
以加载~/.pam_environment
. 该解决方案显然适用于早期版本,但我尚未对其进行测试。Guenther Montag (g-montag) 在 2010-08-19 上写道:
改编自我对超级用户的回答:https ://superuser.com/a/408373/66856