我想知道有没有办法将我的shell变量导出到系统中的所有会话(不仅是当前会话)。我不打算在.bashrc文件中设置它,因为shell变量是一个动态的变量,它不时变化。
答案 0 :(得分:8)
您可以通过在.bashrc
中的DEBUG上设置陷阱来设置会话以继续重新读取磁盘上的文件:
trap 'source ~/.myvars' DEBUG
如果您打开终端A,请在终端B中运行echo VAR=42 >> ~/.myvars
,然后切换回终端A和echo $VAR
,它将“神奇地”设置。
答案 1 :(得分:4)
您似乎误解了export
的作用。它所做的就是将一个局部变量移动到流程中的环境块中(/proc/$$/environ
)。
当创建新进程(fork
)时,程序数据区域(包括环境块)将被复制到新进程(实际上它们最初是共享的,然后在写入时复制)。当运行不同的程序(execve)时,默认情况下环境块保留在前一个程序中。另请参阅env(1)
计划。
因此,环境变量通常从其父进程继承(复制)。将新的环境变量放入正在运行的进程的唯一方法是使用某种接种技术,就像调试器一样。编写这样的程序并不是一件容易的事,我相信你可以想象出安全隐患。
答案 2 :(得分:2)
你做不到。可以在unix stackexchange部分here中找到更好的解释!
shell变量可能不适合您尝试使用的用途。也许您想要使用文件。