¿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?



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.


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.


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.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.