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 $COMMAND
en segundo plano.
Puedes ver sesiones activas con screen -ls
y 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 .screenrc
archivo, 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 screen
comandos anteriores crean cada uno una sesión de pantalla. -t
establece 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 screen
línea inician una sesión y se lanzan vim
al interior. El tercero simplemente inicia una sesión y lo deja cuando se le indica. chdir
cambia el directorio de trabajo para todas las sesiones posteriores.
Si desea tener varios .screenrc
archivos, 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 .screenrc
un 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.