在大多数使用 bash 的 *nix 环境中,您将更改用户本地的环境变量~/.bash_profile或类似文件,然后source更改更改的文件,以使更改在您的会话中生效。
同样,在更改后执行sourceing将使这些更改在您当前的会话中生效。/etc/profile
但是假设您需要更改在 中/etc/profile(或在 下某处/etc/profile.d/)定义的环境变量,并且希望更改立即在系统上所有用户的所有会话中可见。如何在不重新启动系统的情况下实现这一目标?
您可以强制所有登录的用户注销,然后再次登录(并终止并重新启动由使用 /etc/profile 的 shell 启动的任何守护进程)。不需要重新启动。
除此之外,你不能。
您所能做的就是在每个需要新定义的 shell 会话中单独获取 /etc/profile ......但这只会影响您可以实际运行source /etc/profile或. /etc/profile使用的 shell - 例如,您不能直接更改现有环境已经运行的进程(例如正在运行的 X 会话)。
子进程无法更改其父进程的环境。无论如何,不是直接的(父进程可以观察其子进程的行为并据此采取行动,包括更改其自己的环境......但这是完全不同的事情,并且需要编程到父进程中)