Más o menos lo que dice el título:
Mi script de shell debería
- Ejecute el comando A, espere hasta que termine
- ejecutar "pantalla"
- ejecute el comando B1 en la pantalla inicial
- abrir una nueva ventana (generalmente a través de Cmd-ac)
- ejecute el comando B2 en una nueva ventana
- abrir nueva ventana
- ejecute el comando B3 en una nueva ventana
Eso es todo, no es necesario esperar hasta que algunos (o todos) estén terminados, aunque eso daría puntos extra. ¿Cómo podría hacer esto?
Respuesta1
Inicie un fondo screen
y nombre la sesión "mysession":
screen -d -m -S mysession
Ejecutar top
en la primera ventana.
screen -S mysession -X exec top
Inicie otra ventana, asígnele el nombre "win1" y ejecute " vmstat 10
" en ella
screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10
Inicie otra ventana, asígnele el nombre "win2" y ejecute " iostat 30
" en ella
screen -S mysession -X screen -t win2
screen -S mysession -p win2 -X exec iostat 30
Para conectarse y ver la sesión:
screen -x -S mysession
Si alguno de los programas sale, la ventana no se cerrará ya que screen
se habrá iniciado un shell en cada uno (que puede usar si es necesario).
- O -Si solo desea un único comando por ventana, o desea realizar una limpieza más fácil después de que se completen los procesos, no ejecute el shell predeterminado en cada ventana, solo los comandos:
screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0 # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30
screen
"terminará" la ventana (posiblemente dejando el contenido de la ventana intacto, ver zombie
más abajo) cuando el proceso salga, o los cerrará:
screen -S mysession -X quit # nuke whole the session
o
screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill
(Esto puede o no matar cualquier proceso en ejecución, screen
aunque enviará a cada uno un SIGHUP)
Si desea screen
cerrar ventanas automáticamente y salir cuando se hayan completado todos los procesos, agregue esto después de crear la sesión (aunque si no lo ha zombie
configurado en su archivo .screenrc
, probablemente este sea el valor predeterminado de todos modos):
screen -S mysession -X zombie
Eso desactiva las teclas de cierre y resurrección del "zombi", las ventanas desaparecen cuando finaliza el comando en cada ventana y screen
se cerrarán cuando lo haga la última ventana. (Es posible que necesites usar defzombie
en lugar de zombie
, pero solo este último funciona para mí, a pesar de que la documentación indique lo contrario).