Execute ou envie um comando para um painel tmux em uma sessão tmux em execução

43

Eu quero escrever um script de shell que será anexado a uma sessão tmux nomeada, selecione uma janela (ou painel) nessa sessão e execute um comando nessa janela selecionada (ou painel).

Como faço isso a partir de um script bash?

Eu sei

tmux new-window -n:mywindow 'exec something'

permite-me enviar comandos para uma janela recém criada, mas preciso de algo como

tmux select-window -t:0 'my command'

Suponho que eu poderia usar send-keys , mas parece que deve haver algo que receba um comando ou lista de comandos executados.

    
por cjroebuck 24.10.2012 / 13:57

2 respostas

67

Cada painel tmux é uma interface para um único pty (pseudo tty). As janelas não divididas têm um único painel; as janelas divididas têm vários painéis.

tmux não fornece uma maneira de adicionar processos extras a um painel, uma vez que tenha sido iniciado com seu comando inicial. Cabe ao processo do comando inicial (geralmente um shell) fornecer controle de tarefa 1 para esse terminal.

Se você quiser estragar o que está sendo executado no painel, use respawn-pane -k para eliminar o comando existente e substituí-lo por um novo (por exemplo, respawn-pane -t sessionname:0.4 -k 'some -new command' ).

Mas, se você quiser manter o que está sendo executado no painel, talvez não haja uma opção melhor que simplesmente "digitando" com send-keys .

Você pode fazer um script assim (anexe por último, porque senão o script apenas esperará você se desconectar antes de continuar):

session=whatever
window=${session}:0
pane=${window}.4
tmux send-keys -t "$pane" C-z 'some -new command' Enter
tmux select-pane -t "$pane"
tmux select-window -t "$window"
tmux attach-session -t "$session"

Observe que, no comando send-keys , você deve digitar as letras E n t e r , para informar tmux para enviar uma nova chave para a janela. (Naturalmente, todo comando termina com a tecla Enter ).

1 Job control é a arbitragem entre vários grupos de processos de uma única sessão que usa o tty como seu terminal de controle. Ou seja, a chave de suspensão Ctrl + Z e os comandos jobs , fg e bg .

    
por 25.10.2012 / 08:33
5

Você pode usar C-m em vez de Enter . É a mesma coisa. Além disso, tmux facilita o envio para o painel direito / esquerdo usando -t right ou -t left . E se você quiser endereçar um painel em outra janela, basta prefixá-lo com o número da janela e o período, como -t 0.right .

Agora você pode escrever uma função Bash simples para obter a sequência de chaves como argumento e enviá-la para o painel de destino com facilidade.

    
por 15.03.2016 / 19:43

Tags