Tmux-从脚本获取窗口中每个窗格的窗格号?


12

有没有办法找出Tmux中特定窗格的窗格索引?

我知道我可以执行以下操作:

tmux display-message -p  "#{pane_index}"  

但这仅适用于活动窗格。我希望它能在运行的任何窗格中正常工作。通常,在非活动窗格的窗格中运行脚本当然很困难,但是如果您使用可以:set-window-option synchronize-panes在所有窗格之间同步输入,则可以。

我将如何使用它?

在我的工作中,我需要同时连接到负载均衡器中的多个相同服务器,这与Tmux窗格相同。我通常会打开“同步窗格”功能,以使我键入的内容可以同时发送到每个窗格。这很好。

我发现的事情是,我想连接到服务器,有时每个窗格都做一些独特的事情,每次都使用相同的“窗格索引”。例如,我将运行如下命令:

ssh NODE_$(get_pane_number)

同步并在每个窗格中运行时,它们将在具有4个窗格的窗口中运行以下命令:

ssh NODE_0 在窗格0中

ssh NODE_1 在窗格1中

ssh NODE_2 在窗格2中

ssh NODE_3 在窗格3中

我当然可以编写脚本,但是只有开始同步输入之前,它才能很好地工作。有时候,我也想在开始同步输入后执行此操作。

Answers:


12

tmux(从v1.5开始)在它为窗格启动的进程环境中提供TMUX_PANE;每个新窗格都会获得服务器唯一的值。因此,假设TMUX_PANE在您的环境中可用,那么这应该可以满足我的要求:

tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'

${…:?}类似于Bourne的shell中的语法可防止丢失或空的参数扩展。在这种情况下,一个空的扩展将退回到使用“当前活动窗格”的默认值,这通常(但并非总是)与“此窗格”相同(如果命令的tty不是那个,则它们可能会有所不同。该TMUX开始;例如,由于使用的脚本期望,等等)。


甜!完全做到了……非常感谢!
布拉德·帕克斯

“ $ {TMUX_PANE :?}”语法在
鱼壳中不起作用

2

您可以使用以下命令获取所有窗格索引以及有关窗格的许多其他信息:

tmux list-panes -a

请参阅tmux(1)FORMATS以获取可以获取和使用的信息列表。


1
感谢您的反馈-但这不能告诉我哪个窗格是-只是窗口中有0-3窗格,我已经知道了。我希望能够编写一个名为bash的脚本get_pane_number,该脚本实际上返回正确的#而不使窗格处于活动状态。
布拉德·帕克斯

2

在提出的两个解决方案的基础上,我发现此功能对我有用:

I=$(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}')

或以index = 1开头的相同内容

I=$(($(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}') + 1))

它不是最漂亮的,但是它可以工作,我可以将其放入我的设备中,.bashrc$I在需要时使用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.