Tmux

從腳本中獲取視窗中每個窗格的窗格#?

  • November 15, 2020

有沒有辦法在 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啟動;例如,因為使用腳本期望等)。

引用自:https://unix.stackexchange.com/questions/211653