我想知道有没有办法将我的shell变量导出到系统中的所有会话(不仅是当前会话).我不打算在.bashrc文件中设置它,因为shell变量是一个动态的变量,它不时变化.
您可以通过在以下位置的DEBUG上设置陷阱来设置会话以继续重新读取磁盘上的文件.bashrc
:
trap 'source ~/.myvars' DEBUG
Run Code Online (Sandbox Code Playgroud)
如果您打开终端A,echo VAR=42 >> ~/.myvars
在终端B中运行,然后切换回终端A echo $VAR
,它将"神奇地"设置.
你似乎误解了什么export
。它所做的只是将局部变量移动到进程 ( /proc/$$/environ
) 内的环境块中。
当创建一个新进程时(afork
)时,程序数据区域(包括环境块)将被复制到新进程(实际上它们最初是共享的,然后在写入时复制)。当运行不同的程序(execve)时,默认情况下,环境块保留在前一个程序中。另请参阅该env(1)
程序。
因此环境变量通常是从其父进程继承(复制)的。将新的环境变量添加到正在运行的进程中的唯一方法是使用某种接种技术,就像调试器所做的那样。编写这样的程序并不是一件容易的事,我相信您可以想象其中的安全隐患。