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


12

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

もちろんこれをスクリプト化することもできますが、入力の同期を開始するにしかうまくいきません。入力の同期も開始した後、これを実行したい場合があります。

回答:


12

tmux(v1.5以降)は、ペイン用に起動するプロセスの環境でTMUX_PANEを提供します。新しい各ペインはサーバー固有の値を取得します。したがって、TMUX_PANEがご使用の環境で使用可能であると想定すると、これは私が望むと思うことを行うはずです。

tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'

${…:?}Bourneのようなシェルの構文は、欠落または空のパラメーターの展開を防ぎます。この場合、空の展開は「現在アクティブなペイン」を使用するというデフォルトにフォールバックします。これは通常、「常に」というわけではありませんが、「このペイン」と同じです(コマンドのttyが1つでない場合は、おそらく異なります)そのtmuxが開始した(たとえば、スクリプトを使用したり、期待したりするため)。


甘い!それは完全にそれをしました...とても感謝しています!
Brad Parks

"$ {TMUX_PANE :?}"構文はフィッシュシェルでは機能しません
CodyChan

2

すべてのペインインデックスと、ペインに関する他の多くの情報を取得できます。

tmux list-panes -a

tmux(1)取得および操作できる情報のリストを取得するには、フォーマットを参照してください。


1
フィードバックに感謝します-しかし、これはどのペインがどちらであるかを教えてくれません-ウィンドウ内に0〜3のペインがあり、それはすでに理解できました。ペインをアクティブにせずにget_pane_number実際に正しい#返すというbashスクリプトを記述できるようにしたいのですが。
Brad Parks、

2

提案された2つのソリューションを基にして、この機能がうまくいくことを発見しました。

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必要なときにいつでも使用できます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.