Script tmux para Ativar Vários Comandos

21

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.
GTS Joe
fonte

Respostas:

21
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) tmuxlevam comandos 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 para tmuxvocê, é necessário separá-los ;. As ;necessidades para ser protegida a partir da casca, citando / escapando-lo ( ';', ";"ou \;), para parar a casca de interpretar como o fim do tmuxcomando.

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

Recoloque a sessão com tmux a, tmux attachou tmux attach-session(estes são todos equivalentes).

A tmuxsessão terminará assim que os dois comandos tiverem terminado de executar.

Kusalananda
fonte
3

Isso não funcionou para mim (eu estava tentando fazer algo como 'ls -la'). O que fez 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 feia, é bastante funcional.

Basta deixar aqui para o caso de outras pessoas procurarem a mesma coisa.

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

user27221
fonte