如何发送命令到tmux中的所有窗格?
我喜欢打电话:clear-history
在带有巨大回滚的窗格上:clear-history
。 但是,我想脚本的方式发送这个命令到各窗口中的所有窗格。
我知道如何向所有的窗口发送一个命令,但是我怎样才能把命令发送到所有的窗口?
send-keys
和synchronize-panes
从tmux手册页浮现,但我不知道如何将它们结合在一起。 但也许有一个更简单的方法来做到这一点。
额外观察:
考虑到这一点, tmux list-panes -a
似乎列出了当前会话中的所有窗格。 相当有用的开始。 我从哪里出发?
你有没有尝试跟多个窗格的tmux窗口
Ctrl-B : setw synchronize-panes on clear history
晚了一点,但我不想设置和取消设置同步窗格只是为了发送一个命令,所以我创build了一个包装函数tmux周围,并添加了一个自定义函数称为send-keys-all-panes
。
_tmux_send_keys_all_panes_ () { for _pane in $(tmux list-panes -F '#P'); do tmux send-keys -t ${_pane} "$@" done }
我还创build了一个tmux命令的包装来简化调用这个函数(为了方便起见)。 包装和上面的代码都在这里 。
这允许我运行tmux send-keys-all-panes <command>
tmux skap <command
tmux send-keys-all-panes <command>
或tmux skap <command
将<command>
发送到所有窗格。
请注意,tmux是别名到我的包装函数tmux_pp。
上面的答案都没有为我工作(tmux v2.3),但这是从bash命令行:
for _pane in $(tmux list-panes -a -F '#{pane_id}'); do \ tmux clear-history -t ${_pane} ; done
一个更通用的脚本,除了“clear-history”之外的tmux命令,只需用一个参数replace该元素,例如。 $ 1 如果您打算编写脚本来处理一系列的tmux命令,请小心,因为“-t $ {_ pane}”将需要应用于每个命令。
请注意, tmux list-panes
的-a
参数需要覆盖所有会话中所有窗口中的所有窗格。 没有这一点,只有当前tmux窗口中的窗格将受到影响。 如果您打开了多个tmux会话,并且只想将该命令应用于当前会话中的窗格,请将-a
replace为-s
(全部在tmux手册页中)。
我没有模块直接评论上述每个答案,所以这就是为什么他们不为我工作:
我在@ shailesh-garg的回答中遇到的问题是,同步只影响在窗格内发出的命令,而不是在窗格之外使用Ctrl-B :
发出的tmux命令。
我在@kshenoy的回答中遇到的三个问题是:
- 它发送击键到一个窗格内,而不是该窗格的tmux操作,所以例如,如果有一个在窗格中运行的bash shell,并且使用脚本发送“清除历史logging”,则这些将是会出现在bash命令行中。 解决方法是发送“tmux清除历史logging”或将“tmux”预先设置为“$ @”,但是由于其他问题,我没有编辑答案。
- 我无法弄清楚如何发送一个新的字符,而不是字面上的断行;
- 即使这样做,发送“tmux清除历史logging”也没有效果。