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-session
comando (que cria uma nova tmux
sessão) e o split-window
comando (que divide a janela atual em dois painéis) requerem tmux
comandos shell opcionais para serem executados. O detach-client
faz o óbvio no final.
Se você deseja uma divisão horizontal (dois painéis lado a lado), use split-window -h
o comando acima.
Ao enviar vários tmux
comandos, tmux
você 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 tmux
comando.
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 attach
ou tmux attach-session
(todos equivalentes).
A tmux
sessã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.
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'