在处理多个 tmux 会话时,我注意到一些奇怪的事情。我不确定所有的术语,所以如果我有什么不对请纠正我。
在第一个之后创建 tmux 会话不会继承创建它的环境,它们会继承产生第一个会话的环境。
export a=false; export b=false
bash
export a=true
tmux new-session -d -s first
bash
export b=true
tmux new-session -d -s second
然后echo $a $b
从任一会话执行都会给出输出true false
。我期待true true
着第二届会议。
我不知道 tmux 是如何“记住”第一个会话的环境的。我可以进行另一个实验:
如果我在第一个会话中更新环境、分离并生成第二个会话,第二个会话不会继承更新。
另一个实验:
如果我在创建第一个会话后退出子 shell(因此“忘记”了环境变量a
),并生成第二个会话,第二个会话仍然会记住环境。
我想更好地了解为什么会发生这种情况以及 tmux 在幕后所做的一些事情,因此我们非常感谢这方面的任何建议。
有一个名为
ENVIRONMENT
in的部分man 1 tmux
:在手册解释的地方
set-option
,它写道:因此,您的
a
和仅在服务器启动时才b
被复制到。tmux
在您的情况下,它是您创建first
会话的时间。这些变量不在update-environment
选项存储的列表中,因此以后不会更新。如果你做了
然后附加到这个会话,你当前的变量将被吸收
tmux
。这并不意味着echo $a $b
会在已经启动的 shell 中显示它们(由tmux new-session -d -s first
)。但是新窗格中的新 shell(或任何其他进程)将从tmux
.可以全局设置选项。请参阅
OPTIONS
部分。但请记住以下几点:-E
会话时起作用(尽管您可以使用选项更改行为attach-session
;很少有其他命令也支持-E
);总结一下:一般情况下,其中的
tmux
会话和进程不会像简单的子进程那样简单地从客户端继承环境。