¿Cómo crear una pantalla, ejecutando un comando dado?


Soy bastante nuevo en *nix. ¿Hay alguna manera de crear una pantalla, que ejecutará inmediatamente una secuencia de comandos dada (con sus propios argumentos)? Dos horas de googlear no producen nada-tal vez, porque no puedo diga claramente la pregunta.

Espero algo como

screen -dmS new_screen exec "cd /dir && java -version"

Estoy usando screen v4.00.03 y CentOS 5.5 (kernel ver. 2.6.18-194.26.1.el5.028stab079.2)

 28
Author: Alex Abdugafarov, 2011-08-13

7 answers

El problema es que el uso del comando 'exec' screen no inicia un shell. 'cd' es un shell incorporado, por lo que necesita un shell para ello. Además, necesita un shell que permanezca en ejecución para que la pantalla no termine.

Puede usar la opción-X para screen para enviar comandos a una sesión de screen en ejecución, y el comando 'stuff' para enviar pulsaciones de teclas 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í, necesita poner las comillas en la siguiente línea para que los comandos se ejecuten.

 29
Author: mloar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-13 08:10:36

Se crea una pantalla con un nombre y en modo separado:

screen -S "mylittlescreen" -d -m

Luego envía el comando para ser ejecutado en su pantalla:

screen -r "mylittlescreen" -X stuff $'ls\n'

El $ antes de la orden es hacer que el shell analice los \n dentro de las comillas, y se requiere una nueva línea para ejecutar la orden (como cuando presiona intro).

Esto está funcionando para mí en esta versión de pantalla:

Screen screen-v

Screen version 4.00.03jw4 (FAU) 2-May-06

Véase man screen para más detalles sobre los comandos.

 33
Author: kR105,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-13 03:05:33

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 sleep 100 que termina inmediatamente después de la ejecución, la pantalla también terminará. Para que no puedas ver la pantalla que acabas de crear

 4
Author: Tushar Goswami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-02 10:33:12

Quería lanzar pantallas remotas desde un script bash con algunas variables definidas dentro del script 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
 2
Author: jsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-17 22:11:59

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"

 1
Author: Pedro Rodrigues,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-05 15:35:26

Otro enfoque

Cd de primera línea al directorio your. La segunda línea inicia una nueva sesión de pantalla llamada new_screen con bash. Tercera línea ejecutándose java -version

cd /dir
screen -dmS new_screen bash
screen -S new_screen -p 0 -X exec java -version
 0
Author: Dilushan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-28 08:40:22

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 de modo que se ejecuta cuando se envía

 -2
Author: dukevin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-13 08:10:34