script tmux para lanzar varios comandos

21

¿Cómo puedo escribir lo siguiente en un 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
fuente

Respuestas:

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

El new-sessioncomando (que crea una nueva tmuxsesión) y el split-windowcomando (que divide la ventana actual en dos paneles) tmuxtoma comandos de shell opcionales para ejecutarse. Lo detach-clienthace lo obvio al final.

Si desea una división horizontal (dos paneles uno al lado del otro), use split-window -hel comando anterior.

Al enviar varios tmuxcomandos tmux, debe separarlos por ;. Las ;necesidades a ser protegidos de la cáscara citando / escapar de ella ( ';', ";"o \;), para detener la cáscara de interpretar como el final del tmuxcomando.

Lo he dividido todo en líneas separadas para facilitar la lectura. Si hace esto en un script (que recomiendo), asegúrese de que no haya nada después de la final \en cada línea.

Vuelva a adjuntar a la sesión con tmux a, tmux attacho tmux attach-session(todos son equivalentes).

La tmuxsesión finalizará una vez que ambos comandos hayan terminado de ejecutarse.

Kusalananda
fuente
3

Esto no funcionó para mí (estaba tratando de hacer algo como 'ls -la'). Lo que hizo fue:

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

Esto me permitió ejecutar cosas bastante genéricas y, aunque se ve feo, es bastante funcional.

Solo lo dejo aquí en caso de que otras personas estén buscando lo mismo.

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

usuario27221
fuente