我知道可以通过添加条目来设置系统范围的环境变量
/etc/environment
or
/etc/profile
但这需要系统重新启动或 X 重新启动。
是否可以在 Ubuntu / Linux 中设置环境变量,以便在系统范围内立即可用,而无需重新启动操作系统或注销用户?
简单的答案是:you cannot一般来说这样做.
为什么没有通用的解决方案呢?
“为什么?”需要更详细的解释。在 Linux 中,环境是特定于进程的。每个进程环境都存储在专门为该进程分配的特殊内存区域中。
顺便说一句:要快速检查进程的环境,请查看/proc/<pid>/env
(或尝试/proc/self/env
当前正在运行的进程的环境,例如您的 shell)。
当一个(“父”)进程启动另一个(“子”)进程时(通过fork(2)
),父环境的环境是copied为孩子创造环境。此后,这两个环境之间不再存在继承式关联,它们是完全独立的。因此,我们无法改变“全局”或“主”环境来实现您想要的目标。
为什么不简单地更改所有正在运行的进程的每个进程环境?环境的内存区域位于明确定义的位置(基本上就在为堆栈分配的内存之前),因此您无法轻松扩展它,而不破坏进程的其他关键内存区域。
特殊情况下可能的半解决方案
也就是说,我们可以想象几种特殊情况,在这些情况下您确实可以实现您想要的目标。
最明显的是,如果您进行“大小中立”的更改,则可以想象修补所有进程的所有环境。例如,替换每个USER=foo
环境变量(如果存在),以及USER=bar
。我担心这是一个相当特殊的情况。
如果您确实不需要更改所有流程的环境,而只需更改一类众所周知的流程的环境,则可能可以采用更具创意的方法。沃斯普鲁格的回答 https://stackoverflow.com/a/16462131/135724是仅使用 Bash 进程即可完成此操作的令人印象深刻的演示。
可能还有许多其他特殊情况,都有可能的解决方案。但如上所述:一般情况没有解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)