script tmux para iniciar vários comandos

script tmux para iniciar vários comandos

Como posso escrever o seguinte em um script bash?

tmux # Start tmux session.
compass watch /path/to/project1/compass/ # Run the first process.
Ctrl + B, " # Split the pane.
compass watch /path/to/project2/compass/ # Run the second process.
Ctrl + B, D # Exit the session.

Responder1

tmux \
    new-session  'compass watch /path/to/project1/compass/' \; \
    split-window 'compass watch /path/to/project2/compass/' \; \
    detach-client

O new-sessioncomando (que cria uma nova tmuxsessão) e o split-windowcomando (que divide a janela atual em dois painéis) requerem tmuxcomandos shell opcionais para serem executados. O detach-clientfaz o óbvio no final.

Se você deseja uma divisão horizontal (dois painéis lado a lado), use split-window -ho comando acima.

Ao enviar vários tmuxcomandos, tmuxvocê precisa separá-los por ;. O ;precisa ser protegido do shell colocando-o entre aspas/escapando ( ';', ";"ou \;), para impedir que o shell o interprete como o final do tmuxcomando.

Dividi tudo em linhas separadas para facilitar a leitura. Se você fizer isso em um script (que eu recomendo), certifique-se de que não haja nada após o final \de cada linha.

Reconecte-se à sessão com tmux a, tmux attachou tmux attach-session(todos equivalentes).

A tmuxsessão terminará quando ambos os comandos terminarem a execução.

Responder2

Isso não funcionou para mim (eu estava tentando fazer algo como 'ls -la'). O que aconteceu foi:

tmux new-session -d bash
tmux split-window -h bash
#sends keys to first and second terminals
tmux send -t 0:0.0 "<my-first-command>" C-m
tmux send -t 0:0.1 "<my-second-command>" C-m
tmux -2 attach-session -d

Isso me permitiu executar coisas bastante genéricas e, embora pareça feio, é bastante funcional.

Apenas deixando aqui caso outras pessoas estejam procurando a mesma coisa.

Fonte:https://gist.github.com/kizzx2/4739236

Responder3

Para executar um comando curto sem sair no final:

tmux \
    new-session  'ls ; bash' \; \
    split-window 'ls ; bash' 

ou

tmux \
    new-session  'ls ; bash' \; \
    new-window   'ls ; bash' 

informação relacionada