Script de Shell: ejecutar pantalla, abrir varias pantallas y ejecutar un comando en cada una

Script de Shell: ejecutar pantalla, abrir varias pantallas y ejecutar un comando en cada una

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 screeny nombre la sesión "mysession":

screen -d -m -S mysession

Ejecutar topen 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 screense 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 zombiemá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, screenaunque enviará a cada uno un SIGHUP)

Si desea screencerrar 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 zombieconfigurado 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 screense cerrarán cuando lo haga la última ventana. (Es posible que necesites usar defzombieen lugar de zombie, pero solo este último funciona para mí, a pesar de que la documentación indique lo contrario).

información relacionada