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

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

有没有办法找出 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 中

我当然可以编写这个脚本,但这只会很好用我开始同步输入。有时我也想在开始同步输入后执行此操作。

答案1

多路复用器(自 v1.5 起)在为窗格启动的进程环境中提供 TMUX_PANE;每个新窗格都会获得一个服务器唯一的值。因此,假设 TMUX_PANE 在您的环境中可用,那么这应该可以实现我认为您想要的功能:

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

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

答案2

您可以获得所有窗格索引以及有关窗格的许多其他信息

tmux list-panes -a

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

答案3

基于两个建议的解决方案,我发现这个功能对我有用:

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

相关内容