当前位置: 首页>>技术教程>>正文


在哪里声明环境变量?

, ,

问题描述

什么是正确的地方:

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

  2. 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的建议:

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

  2. 应在~/.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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1453.html,未经允许,请勿转载。