为每个人设置全局环境变量


17

如果我在中设置变量/etc/environment,则该变量似乎仅适用于中的管理员sudo su

如何获得适用于所有人的变量?特别是当他们在航站楼时?中的设置/etc/enviroment不适用于bash吗?

Answers:


13

/etc/environment更新将仅在下一个会话中起作用,不会自动重新加载。

这意味着您无法为已经为其他用户启动的会话进行更改。

如果要“重新加载”中的任何内容,则/etc/environment需要以下命令:

source /etc/environment

但是同样,它仅适用于您当前的会话,其他用户直到他们开始新的会话或在自己的会话中运行上述命令时才受到影响。


4

TL; DR

这些配置文件是否全球/etc/environment/etc/profile)或用户特定的~/.profile~/.bashrc)只得到在下次登录/会话处理。

全球性的文件适用于所有用户(不只是根)......但你必须重新启动你的登录会话看到反映在环境的变化。这可以通过su您观察到的呼叫来实现,也可以通过注销/登录或重新启动来实现。您可以su使用非root用户,并且您会看到他们也对环境进行了更改。

您需要重新引导或再次登录以获取全局环境的原因是因为环境是从父进程继承的,而其他所有运行的根进程都是您的登录Shell ...因此,如果您的登录Shell没有环境...那么进程就不会在登录shell中启动。当然,您可以在启动单个进程时为其设置/更新环境,但是您必须为登录Shell设置环境并重新启动所有子进程才能看到它们。

全球环境

就像其他人提到的那样,您需要重新启动或注销/登录才能对进行更改/etc/profile/etc/profile.d/*.sh然后/etc/environment才能进行更改。

这是因为虽然这些文件指定了全局环境...但是它们仅在登录时运行一次,因此现有的登录名/会话将不会反映对这些文件的更改。重新启动会“重置”所有人的登录信息,从而迫使他们选择新环境。

在您自己的登录会话中,您可以source /etc/profile无需重新启动或注销/登录即可获取更改...但是这只会影响您自己的会话以及该会话中运行的新进程。

请注意,其中没有变量插值/etc/environment(它不是脚本),因此您无法执行类似的操作PATH="$PATH:/my/custom/path"

注意也是/etc/profile/etc/profile.d/*.sh只运行登录会话等环境中配置不会有可供系统非登录帐户(即,如果你想设置一个环境变量的守护进程,你的登录shell外运行)。

请注意,这bashrc对于为整个登录shell设置环境不是有用的,但对于bash shell和子进程来说……...对于真正的“ global”或“ user global”,您可能希望将环境配置放在/etc/profileor /etc/profile.d/my-custom-env.sh或中~/.profile。其他外壳程序(例如zsh)也具有自己的配置文件,因此如果/当您切换外壳程序时(或系统上的其他用户使用不同的外壳程序),bashrc中非bash特定的环境配置将引起问题或混乱。

安装新程序是一个常见问题,需要指定一些环境才能使其正常运行。全局环境是一个解决方案,但通常需要重新启动,这对于服务器和自动配置/配置用例而言并不理想。您应该问问自己,这是否真的是系统上所有用户和程序都需要的变量,还是只不过是您需要提供给特定用户或程序的变量。

针对特定用户

查看是否在用户主目录(例如~/.profile ~/.bashrc)中将profile或bashrc中的环境包括在内,具体取决于您是否希望将其用于交互式,登录shell,仅bash等。

请记住,这还需要重新启动或注销/登录,以使环境更改可用于用户登录会话中的所有进程。用户可以source ~/.profile...但是可以在终端中完成,并且仅更新该终端会话和子进程中的环境...不一定要针对用户的整个登录环境。

对于特定程序,有几个选项。

一种是仅在运行命令时提供环境:

VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2

如果您使用的是systemd,还可以在的单位/服务文件中[Service]使用Environment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE

这个选项可能很笨拙,因为每次运行程序时都必须指定环境,但是如果确实仅该程序需要该环境...这确实是最好的方法,您应该习惯它而不是丢弃所有内容放入bashrc或配置文件中。

如果您没有使用systemd或init来设置环境并运行程序...那么,当然,您也可以使用bash脚本包装程序执行,在其中保存完整的命令(包括环境设置)以方便使用。

参考文献:

这里还有一个非常详细的答案,建议您阅读:https : //askubuntu.com/a/247769/824160


3

在下面创建一个自定义的shell脚本

/etc/profile.d/

在创建的脚本中添加全局环境变量,重新启动计算机,然后每个人都可以使用。


我认为这是一种比编辑/ etc / environment文件更可靠的方法,因为随着软件包的更新,该文件可能会更改。
phreed

2

添加一个变量/etc/environment确实对我有用。

但是我确实必须在更改后重新启动/etc/environment才能使更改生效。仅关闭并重新打开终端窗口是不够的。


3
您随时可以source /etc/environment重新加载它。
2015年

注销并重新登录就足够了。
卡鲁杭加(Karuhanga)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.