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