Tmux
從腳本中獲取視窗中每個窗格的窗格#?
有沒有辦法在 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我當然可以編寫這個腳本,但這只有在我開始同步輸入*之前才能正常工作。*在我開始同步輸入之後,有時我也想這樣做。
tmux(自 v1.5 起)在為窗格啟動的程序環境中提供 TMUX_PANE;每個新窗格都會獲得一個伺服器唯一值。因此,假設 TMUX_PANE 在您的環境中可用,那麼這應該做我認為您想要的:
tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'
類似 Bourne 的 shell 中的
${…:?}
語法可防止缺少或空參數的擴展。在這種情況下,一個空擴展會退回到使用“目前活動窗格”的預設值,這通常——但不總是——與“這個窗格”相同(如果命令的 tty 不是那個,它們可能會有所不同tmux啟動;例如,因為使用腳本或期望等)。