Mic*_*k.D 25 environment-variables
如果我在 中设置了一个变量/etc/environment
,它似乎只在sudo su
.
我怎样才能让变量适用于每个人?特别是当他们在终端时?中的设置是否/etc/enviroment
不适用于 bash?
Pan*_*hro 22
该/etc/environment
更新将只对下一届会议的工作,它不会自动重新加载。
这意味着您不能为其他用户已经启动的会话更改它。
如果要“重新加载” 中的任何内容,则/etc/environment
需要以下命令:
source /etc/environment
但同样,它仅适用于您自己的当前会话,其他用户在启动新会话或在自己的会话中运行上述命令之前不会受到影响。
这些配置文件无论是全局( /etc/environment
, /etc/profile
) 还是用户特定的( ~/.profile
, ~/.bashrc
) 仅在下次登录/会话时处理。
在全球性的文件适用于所有用户(不只是根)......但你必须重新启动你的登录会话看到反映在环境的变化。这可以通过su
在您观察到的情况下调用...或通过注销/登录或重新启动来发生。您可以su
使用非 root 用户,您会看到他们也有环境更改。
您需要重新启动或再次登录以获取全局环境的原因是因为环境是从父进程继承的,并且您运行的所有其他进程的根进程是您的登录外壳......所以如果您的登录外壳没有环境......然后在登录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 和子进程没有用...所以对于真正的“全局”或“用户全局”,您可能希望将环境配置放入/etc/profile
or/etc/profile.d/my-custom-env.sh
或~/.profile
。其他外壳(例如 zsh)也有自己的配置文件,因此如果/当您切换外壳(或系统上有其他用户使用不同的外壳)时,bashrc 中非特定于 bash 的环境配置会导致问题或混乱。
安装新程序并需要指定一些环境才能正常运行是一个常见问题。全局环境是一个答案,但通常需要重新启动,这对于服务器和自动供应/配置用例来说并不理想。您应该问问自己,这是否真的是系统上所有用户和程序都需要的变量,或者它是否真的只是您需要提供给特定用户或程序使用的变量。
查看在用户主目录中的配置文件或 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
添加一个变量/etc/environment
对我来说确实有用。
但是我确实必须在更改后重新启动/etc/environment
才能使更改生效。仅仅关闭并重新打开终端窗口是不够的。
归档时间: |
|
查看次数: |
59265 次 |
最近记录: |