Tmux - Obtém o painel # de cada painel em uma janela de um script?

10

Existe uma maneira de descobrir o índice do painel de um painel específico no Tmux?

Eu sei que posso executar algo como:

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

mas isso só funciona no painel ativo. Eu quero que ele funcione em qualquer que seja o painel em que ele é executado. Normalmente, é difícil executar um script em um painel que não seja o ativo, mas você pode usar a entrada :set-window-option synchronize-panes para sincronizar entre todos os painéis.

Como eu usaria isso?

No meu trabalho eu preciso conectar a vários servidores idênticos em um balanceador de carga ao mesmo tempo, o que eu faço com painéis Tmux. Eu normalmente ligo o recurso de sincronizar painéis para permitir que eu tenha o que eu digitar de forma idêntica enviada para cada painel ao mesmo tempo. Isso funciona muito bem.

A coisa que eu acho é que eu gostaria de me conectar aos servidores e fazer algo único para cada painel, às vezes, usando o mesmo "índice de painel" de cada vez. Por exemplo, eu rodaria um comando assim:

ssh NODE_$(get_pane_number)

que, quando sincronizado e executado em cada painel, executaria os seguintes comandos em uma janela com 4 painéis:

ssh NODE_0 no painel 0

ssh NODE_1 no painel 1

ssh NODE_2 no painel 2

ssh NODE_3 no painel 3

Eu poderia, claro, escrever isso, mas isso só funcionaria bem antes eu comecei a sincronizar as entradas. Há momentos em que eu gostaria de fazer isso depois que comecei a sincronizar as entradas também.

    
por Brad Parks 23.06.2015 / 20:38

3 respostas

10

tmux (desde a v1.5) fornece TMUX_PANE no ambiente do processo que inicia para um painel; cada novo painel recebe um valor exclusivo do servidor. Portanto, supondo que TMUX_PANE esteja disponível em seu ambiente, isso deve fazer o que você quer:

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

A sintaxe ${…:?} em um shell parecido com o Bourne impede a expansão de parâmetros ausentes ou vazios. Nesse caso, uma expansão vazia retornaria ao padrão de usar "o painel atualmente ativo", que normalmente é - mas nem sempre - o mesmo que "este painel" (eles provavelmente serão diferentes se o tty do comando não for o único) que tmux foi iniciado, por exemplo, por causa do uso de script ou espera , etc.]

    
por 26.06.2015 / 06:20
2

Você pode obter todo o índice do painel, bem como muitas outras informações sobre os painéis com

tmux list-panes -a

Veja tmux(1) FORMATS para obter uma lista de informações que você pode obter e trabalhar.

    
por 23.06.2015 / 21:30
1

Criando as duas soluções propostas, descobri que essa função funciona para mim:

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

ou a mesma coisa que começa com índice = 1

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

Não é o mais bonito, mas funciona e posso soltá-lo no meu .bashrc e usar apenas $I sempre que precisar

    
por 02.02.2018 / 21:34

Tags