¿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-session
comando (que crea una nueva tmux
sesión) y el split-window
comando (que divide la ventana actual en dos paneles) requieren tmux
comandos de shell opcionales para ejecutarse. detach-client
Al final hace lo obvio .
Si desea una división horizontal (dos paneles uno al lado del otro), utilice split-window -h
el comando anterior.
Cuando envíes varios tmux
comandos, tmux
deberás separarlos por ;
. Debe ;
protegerse del shell entrecomillando/escapándolo ( ';'
o ";"
) \;
, para evitar que el shell lo interprete como el final del tmux
comando.
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 attach
o tmux attach-session
(todos ellos son equivalentes).
La tmux
sesió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.
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'