script tmux para ejecutar varios comandos

script tmux para ejecutar varios comandos

¿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.

Respuesta1

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) requieren tmuxcomandos de shell opcionales para ejecutarse. detach-clientAl final hace lo obvio .

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

Cuando envíes varios tmuxcomandos, tmuxdeberás separarlos por ;. Debe ;protegerse del shell entrecomillando/escapándolo ( ';'o ";") \;, para evitar que el shell lo interprete como el final del tmuxcomando.

He dividido todo en líneas separadas para facilitar la lectura. Si haces esto en un script (lo cual recomiendo), asegúrate de que no haya nada después del final \en cada línea.

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

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

Respuesta2

Esto no funcionó para mí (estaba intentando 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.

Lo dejo aquí por si otras personas buscan lo mismo.

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

Respuesta3

Para ejecutar un comando corto sin salir al final:

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

o

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

información relacionada