假设我正在使用带有 4 个窗格的 tmux 窗口(如这个问题。现在我更改了一些环境变量,并且希望在所有 4 个窗格中都能识别新值。有没有一种简单的方法可以用一个命令重新生成所有 4 个窗格?
我知道这:respawn-pane -k
对任何一个窗格都有效,但是必须输入 4 次是很烦人的。我也尝试过respawn-window
,但这给我留下了一个新窗格(它杀死了我的 4 窗格视图)。
谢谢
答案1
如果不出意外的话,它似乎很容易编写脚本(尽管请参阅评论以获取有关更好方法的警告):
bash/zsh: for pane in $(tmux list-panes -a -F "#D"); do tmux respawn-pane -k -t $pane; done
鱼:for pane in (tmux list-panes -a -F "#D"); tmux respawn-pane -k -t $pane; end
我确信您知道,应谨慎使用此选项,因为它将结束任何其他窗格中运行的所有进程。
答案2
我不确定为什么在最初提出问题时我没有提到这一点,但作为正交答案,这个问题中的用例是我转向的主要原因之一鱼壳几年前。
Fish 有一个称为“通用变量”的功能,它会在所有正在运行的 shell 实例中更新/更改(并持久化)。例如:
# Long form
set --universal --export some_sock /run/myapp.sock
# Short form
set -Ux some_sock /run/myapp.sock
我所有正在运行 Fish 的 tmux 窗格都将具有新变量和/或更新值。