スクリプトからウィンドウ内の各ウィンドウのウィンドウ番号を取得しますか?

スクリプトからウィンドウ内の各ウィンドウのウィンドウ番号を取得しますか?

Tmuxで特定のウィンドウのウィンドウインデックスを見つける方法はありますか?

私は次のことを実行できることを知っています。

tmux display-message -p  "#{pane_index}"  

ただし、これはアクティブウィンドウでのみ機能します。実行中のすべてのウィンドウで機能したいです。通常、アクティブウィンドウではなくウィンドウでスクリプトを実行するのは難しいですが、:set-window-option synchronize-panesすべてのウィンドウ間で入力同期を使用することは可能です。

これをどのように使用しますか?

私の仕事では、ロードバランサーの複数の同じサーバーに同時に接続する必要があります。これはTmux Podを使用して行われます。私は通常、私の入力を各ウィンドウに同時に送信できるように、同期ウィンドウ機能をオンにします。これは素晴らしい作品です。

私はサーバーに接続し、時には毎回同じ「ウィンドウインデックス」を使用して各ウィンドウでいくつかのユニークなタスクを実行したいと思いました。たとえば、次のコマンドを実行します。

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などのシェルの構文は、欠落しているか${…:?}空の引数が拡張されるのを防ぎます。この場合、空の拡張は「現在アクティブなウィンドウ」のデフォルト設定を使用することに置き換えられます。これは通常(常にではありませんが)「このウィンドウ」と同じです(コマンドのttyがそのウィンドウではない場合は異なる場合があります)マルチプレクサたとえば、次のように起動しました。スクリプトまたは予想される待つ)。

おすすめ記事