¿Cómo puedo iniciar sesiones de varias pantallas automáticamente?

¿Cómo puedo iniciar sesiones de varias pantallas automáticamente?

Estoy intentando crear un comando que inicie screen, cree cuatro sesiones con nombres diferentes y ejecute cuatro comandos diferentes.

Sé cómo hacer esto manualmente:

1. screen
2. ./command1 args
3. CTRL-A :sessionname Session 1
4. CTRL-A C
5. (GOTO 2)

¿Puedo hacer esto con un script bash o algo así? ¿Cómo lo haría?

Respuesta1

screen -dmS "$SESSION_NAME" "$COMMAND" "$ARGUMENTS"generará una pantalla que se ejecuta $COMMANDen segundo plano.

Puedes ver sesiones activas con screen -lsy volver a conectar con screen -r "$SESSION_NAME".

Las sesiones muertas se pueden eliminar con screen -wipe.

Respuesta2

Para iniciar varias sesiones automáticamente, configure un .screenrcarchivo, un archivo de configuración para la pantalla. En él, puedes crear sesiones, iniciar programas, cambiar el directorio de trabajo, etc. Lo uso para inicializar mi sesión de pantalla.

Ejemplo simple para un archivo .screenrc:

# don't display the copyright page
startup_message off

# increase scrollback buffer size
defscrollback 10000

# create windows
screen -t TODO vim TODO.txt
chdir src
screen -t coding vim main.c
screen -t run 

Los screencomandos anteriores crean cada uno una sesión de pantalla. -testablece el título de la sesión; el resto de la línea es el comando a ejecutar y sus parámetros.

Así, la primera y segunda screenlínea inician una sesión y se lanzan vimal interior. El tercero simplemente inicia una sesión y lo deja cuando se le indica. chdircambia el directorio de trabajo para todas las sesiones posteriores.

Si desea tener varios .screenrcarchivos, simplemente nómbrelos como desee y seleccione uno con screen -c myscreenrc.

Respuesta3

Puede utilizar las opciones d, m, S juntas:

screen -Sdm s1
screen -Sdm s2
screen -Sdm s3

S: Para crear una pantalla

d: separarse de una pantalla

m: Para imponer la creación de una pantalla, independientemente de si la pantalla se llama desde otra pantalla o no.

Respuesta4

Tengo muchos casos en los que necesito abrir un conjunto de hosts para investigación o soporte. Debido a que sólo necesito estas ventanas adicionales ocasionalmente, decidí usar un script de shell en lugar de .screenrcun enfoque.

por ejemplo en ~/bin/prod_support:

#!/bin/bash

if [[ ! -z "$STY" ]]; then
        screen -t "hosta" ssh hosta
        screen -t "hostb" ssh hostb
else
        echo "start up screen first"
fi

Si se ejecuta desde unsin pantallashell Recibo un recordatorio... si se ejecuta desde la pantalla interna, agregará ventanas con títulos para cada ejecución del script.

información relacionada