在哪里声明环境变量?

什么是正确的地方:

  1. 全球环境变量意味着影响所有用户?
  2. 用户特定的环境变量?

我想这会帮助你理清

为了增加sagarchalise的答案,我可以总结链接建议的适当的设置位置。

对于全局设置,系统范围的环境变量

  • 使用/etc/environment
  • 不要使用/etc/profile/etc/bash.bashrc

从页面:

/etc/environment […]专门用于系统范围的环境变量设置。 它不是一个脚本文件,而是由赋值表达式组成,每行一个。 具体来说,此文件存储系统范围的区域设置和路径设置。

使用/etc/profile是一种非常方便的方法,但在Ubuntu下它的function大大减少了。 它的存在只是指向/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上的建议:

  1. 旨在影响所有用户的全局环境变量应该放在/etc/environment

  2. 用户特定的环境变量应在~/.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 。 这个解决方案显然适用于早期版本,但我还没有测试过。

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