gnu-screen - create - name screen
¿Cómo crear una pantalla, ejecutando un comando dado? (7)
Creas una pantalla con un nombre y en modo separado:
screen -S "mylittlescreen" -d -m
Luego envías el comando para ser ejecutado en tu pantalla:
screen -r "mylittlescreen" -X stuff $''ls/n''
El $
antes del comando es hacer que el shell analice el / n dentro de las comillas, y se requiere la nueva línea para ejecutar el comando (como cuando presionas Intro).
Esto está funcionando para mí en esta versión de pantalla:
$ screen -v
Versión de pantalla 4.00.03jw4 (FAU) 2-May-06
Por favor, vea la man screen
para obtener detalles sobre los comandos.
Soy bastante nuevo en * nix. ¿Hay alguna forma de crear una pantalla que ejecute inmediatamente una secuencia de comandos determinada (con sus propios argumentos)? Dos horas de googlear no producen nada, tal vez, porque no puedo expresar claramente la pregunta.
Espero algo como
screen -dmS new_screen exec "cd /dir && java -version"
Estoy usando la pantalla v4.00.03 y CentOS 5.5 (versión del kernel 2.6.18-194.26.1.el5.028stab079.2)
Creo que puedes usar esto
function exec_in_screen() {
name=$1
command=$2
screen -dmS $name sh; screen -S $name -X stuff "$command/n";
}
Entonces...
exec_in_screen "test" "ls"
El problema es que el uso del comando de pantalla ''exec'' no inicia un shell. ''cd'' es un shell incorporado, así que necesitas un shell para él. Además, necesita un shell que permanezca en ejecución para que la pantalla no finalice.
Puede usar la opción -X para enviar comandos a una sesión de pantalla en ejecución, y el comando ''stuff'' para enviar pulsaciones a la ventana actual. Prueba esto:
screen -dmS new_screen sh
screen -S new_screen -X stuff "cd /dir
"
screen -S new_screen -X stuff "java -version
"
Sí, debe colocar las comillas en la siguiente línea para que se ejecuten los comandos.
Otro enfoque
Primera linea de cd al directorio de tu. La segunda línea inicia una nueva sesión de pantalla llamada new_screen con bash. Tercera línea ejecutando java -version
cd /dir
screen -dmS new_screen bash
screen -S new_screen -p 0 -X exec java -version
Quería lanzar pantallas remotas desde un script de bash con algunas variables definidas dentro del script de bash y disponibles dentro de la pantalla. Así que lo que funcionó para mí fue
#!/bin/bash
SOMEVAR1="test2"
# quit existing if there is one running already, be careful
screen -D -RR test1 -X quit || true
screen -dmS test1
screen -r test1 -p 0 -X stuff $"echo ${SOMEVAR1} ^M"
Donde el carácter de retorno, ^ M, debe ingresar usando vim como
i CTRL-V ENTER ESCAPE
Sí, lo que quieres es el comando "cosas"
por ejemplo
screen -dmS new_screen -X stuff "cd / dir && java -version
"
la segunda cita está en la siguiente línea para que se ejecute cuando se envíe
screen -dmS screen_name bash -c ''sleep 100''
Esto creará una nueva pantalla llamada screen_name
. Y dentro de la pantalla dormirá durante 100 segundos.
Tenga en cuenta que si escribe algún comando en lugar de la sleep 100
que termina inmediatamente después de la ejecución, la pantalla también terminará. Así que no podrás ver la pantalla que acabas de crear.