¿Cómo obtener la salida dentro de `screen` a un script?

33

Tengo una screeninstancia ejecutándose y necesitaría ejecutar algo de código dentro de screen, y obtener el resultado en mi script.

La primera parte es bastante fácil, solo screen -S session_name -X eval 'stuff "$cmd"\015'.
(Modifiqué una línea que encontré en un script )

La segunda parte, sacar la salida, es más complicada. ¿Cómo puedo obtener toda la salida, sea cual sea su tamaño?

1ace
fuente
1
Relacionado: explicación descreen -X stuff … ; Una pregunta similar a la tuya .
Gilles 'SO- deja de ser malvado'
Gracias :) El segundo enlace se explicó por qué el primer comando tiene que ser stuff, que era lo que tenía problemas para entender.
1ace

Respuestas:

29

Podrías comenzar screencon la -Lopción. Esto hará que la pantalla cree un archivo screenlog.n(la parte n es numérica, comenzando con un cero) en el directorio de trabajo actual.

En su caso, esto se vería así: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Mientras recuerdes limpiar después, esto debería coincidir con lo que estás buscando.

Para la última línea del registro, se puede obtener fácilmente tail -1 screenlog.0o se puede analizar todo el registro de la forma que desee.

Nueva Jersey
fuente
Sin embargo, una cosa: el screencomando que le di fue solo enviar el comando. Para comenzar screen, usé screen -dmS name program;-)
1ace
22

Un matiz más que puede ser útil en el futuro: si está en una sesión de pantalla, puede solicitar interactivamente que se cree el archivo de registro. Presione ctrl- a H(Control-A seguido de H mayúscula) para solicitar que la pantalla comience a volcar cualquier ventana en la que se encuentre en un archivo de registro.

rickumali
fuente
55
No sé si se debe a una versión más nueva, pero mi man screenrespuesta es que tengo que escribir CA H, sin el Control solo para H. Sad, que esto no captura el registro anterior.
Matmarbon
2
¡Tienes razón! Es CA H generar un archivo de registro. Tenga en cuenta que es H mayúscula (h minúscula produce solo una copia impresa de la pantalla actual).
rickumali
3
Actualice la respuesta a CA H. Los futuros buscadores pueden ser engañosos y perder la respuesta correcta.
gc5
¿Alguien sabe de una manera de enviar el comando a través de un script? Como en el control de envío + ay luego la H después de una fracción de segundo.
Zach W.