有没有办法在 Tmux 中找出特定窗格的窗格索引?
我知道我可以运行类似的东西:
tmux display-message -p "#{pane_index}"
Run Code Online (Sandbox Code Playgroud)
但这仅适用于活动窗格。我希望它适用于它运行的任何窗格。通常当然很难在非活动窗格的窗格中运行脚本,但如果您使用:set-window-option synchronize-panes
同步所有窗格之间的输入,则可以。
在我的工作中,我需要同时连接到负载均衡器中的多个相同服务器,我使用 Tmux 窗格来完成。我通常会打开同步窗格功能,以便将我键入的任何内容同时发送到每个窗格。这很好用。
我发现我想连接到服务器并有时对每个窗格做一些独特的事情,每次都使用相同的“窗格索引”。例如,我会像这样运行一个命令:
ssh NODE_$(get_pane_number)
Run Code Online (Sandbox Code Playgroud)
在每个窗格中同步并运行时,它将在具有 4 个窗格的窗口中运行以下命令:
ssh NODE_0
在窗格 0
ssh NODE_1
在窗格 1
ssh NODE_2
在窗格 2
ssh NODE_3
在窗格 3
我当然可以编写这个脚本,但这只会在我开始同步输入之前运行良好。有时我也想在开始同步输入后执行此操作。
Chr*_*sen 14
tmux(自 v1.5 起)在它为窗格启动的进程的环境中提供 TMUX_PANE;每个新窗格都有一个服务器唯一值。因此,假设 TMUX_PANE 在您的环境中可用,那么这应该做我认为您想要的:
tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'
Run Code Online (Sandbox Code Playgroud)
类似${…:?}
Bourne 的 shell 中的语法可防止扩展丢失或空参数。在这种情况下,空扩展将回退到使用“当前活动窗格”的默认值,这通常——但不总是——与“这个窗格”相同(如果命令的 tty 不是那个,它们可能会有所不同该TMUX开始;例如,由于使用的脚本或期望,等等)。