enviar comando a una sesión de pantalla que ya se está ejecutando

11

He estado tratando de enviar comandos a una sesión de pantalla gnu en ejecución (4.00.03) en opensolaris, pero no puedo hacer que ejecute ningún comando a través de cualquier combinación de screen -X

Ok, comienzo una sesión de pantalla con screen -S test, y luego traté de screen -r -X "date"mostrarme la fecha, cuando me volvería a conectar a ella. Pero ni un mensaje de error ni salida en la pantalla sucedió. Intenté con tantas combinaciones que ni siquiera puedo recordar.

¿Alguna pista sobre cómo lograrlo?

La razón por la que estoy haciendo esto es porque tengo un programa, que no viene como un demonio, y deseo comenzarlo en una sesión de pantalla, para que luego pueda ver lo que está sucediendo.

Der Hochstapler
fuente
1
parece, como si este "comando" del que están hablando en las páginas del manual está destinado a un comando de pantalla, como la configuración de la sesión de pantalla en sí. En lugar de enviar comandos para el shell, que se abre en la sesión de pantalla. Entonces, ¿alguien tiene una idea de cómo hacerlo posible con un script bash?
@Axon: Sí, -X envía comandos de pantalla, no comandos de shell, pero la pantalla tiene un comando 'pantalla' que puede abrir nuevas ventanas de pantalla.

Respuestas:

18

En realidad es bastante simple. Puedes usar lo siguiente:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'emula presionando la Entertecla.

NOTA: ese 'material' es un comando de pantalla. http://www.gnu.org/software/screen/manual/screen.html#Stuff

thegatekeeper
fuente
¿Podría especificar qué representa "cosas"? ¿Es ese un nombre ... o un comando ... u otros parámetros?
Cerin
De hecho, funciona, pero no diría que es simplemente de todos modos;) Esto es algo como pasar eventos presionados por teclas y pasar nueva línea a la pantalla. ¿No hay un comando de ejecución de pantalla normal ...?
ducin
@Cecin: stuffes un comando de pantalla para 'meter' una cadena en stdin
konrad
Esto es muy bueno, pero por alguna razón no funciona con "screen -RdS sessionname -X stuff 'ls -l' echo -ne '\015'", ¿por qué?
e271p314
esto no funciona a menos que ejecute el comando dos veces ... y en líneas de comando separadas ... si no hago screen -d -m -S sessionname; screen -S sessionname -X [...]nada funcionará, incluso (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]no hace nada excepto crear una nueva sesión de pantalla que no hace nada. voto
negativo
5

Suena como si quisieras:

$ pantalla -S prueba -d -m -c / dev / null - sh -c 'fecha; exec $ SHELL '

-S test: nombra esta sesión
-d -m: pantalla de inicio separada
-c / dev / null: ignore ~ ​​/ .screenrc (proporcione un archivo diferente o suelte esta opción,
  según sea necesario)
-: opciones de fin de pantalla
sh -c 'fecha; exec $ SHELL ': comando para ejecutar la pantalla, tenga en cuenta que si este comando
  era solo "fecha" y la pantalla saldría inmediatamente. si no quieres salir
  pantalla después de que salga su comando, entonces puede usar:
    $ screen -S test -d -m -c / dev / null - su comando aquí

O tal vez solo quieres dtach .


fuente
Ejecutar esto da como resultado nada. No hay mensajes de éxito o error, pero screen -listmuestra que no hay sesiones abiertas.
Cerin
Esta respuesta funcionó para mí. La clave era - para finalizar las opciones de pantalla.
Plazgoth
1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

Abra una nueva ventana (con título de título ) en una sesión existente llamada session_name , y ejecute shell_command (con argumentos opcionales args )

Jeremy Kao
fuente