Come ottenere l'output all'interno di `screen` in uno script?


33

Ho screenun'istanza in esecuzione e avrei bisogno di eseguire del codice all'interno di screen, e ottenere il risultato sul mio script.

La prima parte è abbastanza semplice, io solo screen -S session_name -X eval 'stuff "$cmd"\015'.
(Ho modificato una riga che ho trovato in uno script )

La seconda parte, uscendo dall'output, è più complicata. Come posso ottenere l'intero output, qualunque sia la sua dimensione?



Grazie :) Il secondo link è stato spiegato perché il primo comando deve essere stuff, che era quello che avevo difficoltà a capire.
1ace

Risposte:


29

Puoi iniziare screencon l' -Lopzione. Questo farà sì che lo schermo crei un file screenlog.n(la parte n è numerica, iniziando con uno zero) nella directory di lavoro corrente.

Nel tuo caso questo sarebbe simile a: screen -S session_name -L -X eval 'stuff "$cmd"\015'

Finché ti ricordi di pulire dopo, questo dovrebbe corrispondere a quello che stai cercando.

Per l'ultima riga del registro, è possibile ottenerlo facilmente con tail -1 screenlog.0, oppure è possibile analizzare l'intero registro come desiderato.


Una cosa, però: il screencomando che ho dato è stato solo di inviare il comando. Per iniziare screen, l'ho usato screen -dmS name program;-)
1ace

22

Un'altra sfumatura che potrebbe essere utile in futuro: se ti trovi in ​​una sessione dello schermo, puoi richiedere interattivamente la creazione del file di registro. Premi ctrl- a H(Control-A seguito da H maiuscola) per chiedere alla schermata di iniziare a scaricare qualunque finestra ci si trovi in ​​un file di registro.


5
Non so se è a causa di una versione più recente, ma il mio man screendice, devo digitare CA H, senza il controllo solo per H. Sad, che non acquisisce il registro precedente.
Matmarbon,

2
Hai ragione! CA H genera un file di registro. Si noti che è la H maiuscola (la minuscola h produce solo una copia stampata della schermata corrente).
rickumali,

3
Aggiorna la risposta a CA H. I futuri ricercatori potrebbero essere fuorvianti e perdere la risposta corretta.
gc5,

Qualcuno sa come inviare il comando tramite uno script? Come in send control + a e poi H dopo una frazione di secondo.
Zach W.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.