Tmux - Ottieni il riquadro # di ciascun riquadro in una finestra da uno script?


12

C'è un modo per scoprire l'indice del riquadro di un determinato riquadro in Tmux?

So di poter eseguire qualcosa del tipo:

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

ma funziona solo sul riquadro attivo. Voglio che funzioni per qualunque riquadro venga eseguito. Normalmente, naturalmente, è difficile eseguire uno script in un riquadro che non sia il riquadro attivo, ma è possibile se si utilizza l' :set-window-option synchronize-panesopzione per sincronizzare l'input tra tutti i riquadri.

Come lo userei?

Nel mio lavoro devo collegarmi a più server identici in un bilanciamento del carico contemporaneamente, cosa che faccio con i pannelli Tmux. Normalmente accendo la funzione di sincronizzazione dei riquadri per consentirmi di inviare nello stesso momento qualunque cosa digiti in modo identico a ciascun riquadro. Funziona benissimo.

La cosa che trovo è che mi piacerebbe connettermi ai server e fare qualcosa di unico per ogni riquadro a volte, usando lo stesso "indice dei pannelli" ogni volta. Ad esempio, esegui un comando in questo modo:

ssh NODE_$(get_pane_number)

che, quando sincronizzato ed eseguito in ciascun riquadro, eseguirà i seguenti comandi in una finestra con 4 riquadri:

ssh NODE_0 nel riquadro 0

ssh NODE_1 nel riquadro 1

ssh NODE_2 nel riquadro 2

ssh NODE_3 nel riquadro 3

Ovviamente potrei scriverlo, ma funzionerebbe bene solo prima di iniziare a sincronizzare gli input. Ci sono momenti in cui mi piacerebbe farlo anche dopo aver iniziato a sincronizzare gli input.

Risposte:


12

tmux (dalla v1.5) fornisce TMUX_PANE nell'ambiente del processo che avvia per un riquadro; ogni nuovo riquadro ottiene un valore univoco per il server. Quindi, supponendo che TMUX_PANE sia disponibile nel tuo ambiente, questo dovrebbe fare quello che penso tu voglia:

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

La ${…:?}sintassi in una shell tipo Bourne impedisce l'espansione di parametri mancanti o vuoti. In questo caso, un'espansione vuota tornerebbe al valore predefinito di utilizzo del "riquadro attualmente attivo", che di solito è - ma non sempre - lo stesso di "questo riquadro" (probabilmente differiranno se il comando tty non è quello che tmux iniziato, ad esempio a causa di utilizzare lo script o di aspettare , eccetera).


dolce! che l'ha fatto totalmente ... molto apprezzato!
Brad Parks,

La sintassi "$ {TMUX_PANE :?}" non funziona in fish-shell
CodyChan

2

È possibile ottenere tutti gli indici dei riquadri e molte altre informazioni sui riquadri con

tmux list-panes -a

Vedi tmux(1)FORMATI per ottenere un elenco di informazioni che puoi ottenere e utilizzare.


1
grazie per il feedback - ma questo non mi dice quale riquadro è quale - solo che ci sono riquadri 0-3 in una finestra, che ho già potuto capire. Voglio essere in grado di scrivere uno script bash chiamato get_pane_numberche in realtà restituisce il # giusto senza che il riquadro sia attivo.
Brad Parks,

2

Basandomi sulle due soluzioni proposte, ho trovato questa funzione adatta a me:

I=$(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}')

o la stessa cosa che inizia con index = 1

I=$(($(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}') + 1))

Non è il più bello ma funziona e posso inserirlo nella mia .bashrce utilizzarlo solo $Iquando ne ho bisogno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.