15

我想知道有没有办法将我的 shell 变量导出到系统中的所有会话(不仅是当前会话)。我不想在 .bashrc 文件中设置它,因为 shell 变量是动态变量,它会不时更改。

4

3 回答 3

13

您可以通过在 DEBUG 中设置陷阱来设置会话以继续重新读取磁盘上的文件.bashrc

trap 'source ~/.myvars' DEBUG

如果您打开终端 A,echo VAR=42 >> ~/.myvars在终端 B 中运行,然后切换回终端 A echo $VAR,它会“神奇地”设置。

于 2013-02-20T22:57:34.947 回答
4

你似乎误解了什么export。它所做的只是将一个局部变量移动到进程(/proc/$$/environ)中的环境块中。

当创建一个新进程时(a fork),程序数据区域,包括环境块,被复制到新进程(实际上它们最初是共享的,然后在写入时复制)。当运行不同的程序(execve) 时,默认情况下,环境块保留在前一个程序中。另见env(1)程序。

所以环境变量通常是从它们的父进程继承(复制)的。让新环境变量进入运行进程的唯一方法是使用某种接种技术,就像调试器一样。编写这样的程序并非易事,我相信您可以想象其中的安全隐患。

于 2013-02-21T10:14:41.490 回答
3

你不能。可以在此处的 unix stackexchange 部分找到更好的解释!

shell 变量可能不适合您尝试实现的用途。也许您想改用文件。

于 2013-02-20T22:56:46.547 回答