2013-01-08 29 views
62

Ho bisogno di salvare l'intero output di screen in un file per controllare in seguito tutto il contenuto. Il motivo è che sto scaricando una memoria flash attraverso la porta seriale, usando lo schermo per interfacciarlo con esso. Vorrei salvarlo su un file per controllare la struttura della memoria.Salvare l'output "schermo" (programma) su un file

ho provato:

$: screen /dev/ttyUSB0 115200 >> foo.txt 
$: screen /dev/ttyUSB0 115200 | tee foo.txt 

e ho anche cercato di usare bufferfile dallo schermo, ma non capisco come usarlo.

C'è un modo semplice?

+0

L'impostazione di produzione che sto utilizzando ha più istanze di schermo. Quello di cui ho bisogno l'output ha linea come 'pts/10'. Quindi cosa dovrei fare per ottenere il suo output su un file? – Sid

risposta

68

C'è una linea di comando per la registrazione. L'output viene salvato nel file screenlog.n, dove n è un numero dello schermo. Da man pages of screen:

'-L' Indica alla schermata di attivare la registrazione automatica delle uscite per le finestre.

+3

Grazie. C'è un modo per produrre ciò che lo schermo ha già nel suo buffer di output? Per esempio. Ho dimenticato di abilitare la registrazione, ma l'output è disponibile nel buffer della schermata di scorrimento: come scriverlo in un file? – Tagar

+13

Basta cercare un po 'di più .. Ecco la risposta per il mio commento repubblicano - http://stackoverflow.com/questions/4807474/copying-gnu-screen-scrollback-buffer-to-file-extended-hardcopy Ctrl + A e: per arrivare in modalità comando, quindi hardcopy -h nel caso qualcuno abbia bisogno di questo. – Tagar

+1

Il file di registro verrà creato nella stessa directory in cui è stata eseguita la schermata. – lepe

4

Il comando 'script' sotto Unix dovrebbe fare il trucco. Basta eseguirlo all'inizio della tua nuova console e dovresti essere bravo.

+0

fantastico! dove lo stampa? – Edoardoo

+0

Dovrebbe solo scrivere su un file. Il comando è un po 'caotico, ma penso che questo potrebbe risolverlo un po': http://linux.byexamples.com/archives/279/record-the-terminal-session-and-replay-later/ – Ruben

66

È inoltre possibile utilizzare Control-a + H per salvare le registrazioni nel file screenlog.n. Ancora un controllo-a + H per spegnere.

C-a H: avvia/termina la registrazione della finestra corrente nel file "screenlog.n".

+5

+1.Se non è possibile creare il registro, provare a cambiare la directory di lavoro della finestra dello schermo: Ctrl-'a' + ':' e digitare ad esempio 'chdir/home/foobar/baz' – Chriki

+1

Ca + H cambia solo le finestre dello schermo per me . Niente a che vedere con un file di registro! – aaa90210

3

Quanto segue potrebbe essere utile (Testato su: Linux/Ubuntu 12.04):

cat /dev/ttyUSB0 

Utilizzando quanto sopra, è quindi possibile fare tutte le re-direzioni che avete bisogno. Ad esempio, per eseguire il dump di uscita per la console risparmiando al file, faresti:

cat /dev/ttyUSB0 | tee console.log 
+0

Questo ha funzionato perfettamente per me. Sto registrando l'output del monitor seriale da una sessione di acquisizione dati Arduino. –

8

per Mac terminale:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200 

dettagli

  • script costruito in app per "fare un dattiloscritto di sessione di terminale"
  • -a aggiungono al file di output
  • -t 0 tempo tra la scrittura sul file di output è 0 secondi, quindi out.t xt viene aggiornata per ogni nuovo char
  • out.txt è solo il nome del file di output
  • screen /dev/ttyUSB0 115200 - comando dal domanda per il collegamento a dispositivi esterni

è quindi possibile utilizzare la coda per vedere che il file sta aggiornando

tail -100 out.txt

+0

Questo non ha funzionato per me su un Mac. Il file di registro mostra lo script che inizia il common e il comando termina, ma non i dati ricevuti dal comando screen. – David

7

La risposta selezionata non funziona abbastanza bene con più sessioni e non consente di specificare un nome di file di registro personalizzato.

Per le sessioni dello schermo più, questa è la mia formula:

1) creare un file di configurazione per ogni processo:

logfile test.log 
logfile flush 1 
log on 
logtstamp after 1 
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012" 
logtstamp on 

Se si vuole farlo "al volo", è possibile cambiare logfile automaticamente. \012 significa "nuova linea", poiché l'utilizzo di \n lo stamperà sul file di registro: source.

2) Avviare il comando con le bandiere e le "-c" "-l":

screen -c ./test.conf -dmSL 'Test' ./test.pl 

Questo è tutto. Si vedrà "test.log" dopo la prima ondata:

... 
6 Something is happening... 
[ test.pl: 2016-06-01 13:02:53 ] 
7 Something else... 
[ test.pl: 2016-06-01 13:02:54 ] 
8 Nothing here 
[ test.pl: 2016-06-01 13:02:55 ] 
9 Something is happening... 
[ test.pl: 2016-06-01 13:02:56 ] 
10 Something else... 
[ test.pl: 2016-06-01 13:02:57 ] 
11 Nothing here 
[ test.pl: 2016-06-01 13:02:58 ] 
... 

ho scoperto che "-L" è ancora necessaria anche quando "accedere" è il file di configurazione.

Non è stato possibile trovare un elenco delle variabili di formato dell'ora (come% m) utilizzate dallo schermo. Se si dispone di un collegamento di tali formati, si prega di postare qui sotto.

** ** EXTRA

Nel caso in cui si desidera farlo "al volo", è possibile utilizzare questo script:

#!/bin/bash 
if [[ $2 == "" ]]; then 
    echo "Usage: $0 name command"; 
    exit 1; 
fi 
name=$1 
command=$2 
path="/var/log"; 
config="logfile ${path}/${name}.log 
logfile flush 1 
log on 
logtstamp after 1 
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\" 
logtstamp on"; 
echo "$config" > /tmp/log.conf 
screen -c /tmp/log.conf -dmSL '$name' $command 
rm /tmp/log.conf 

Per usarlo, salvarlo (screen.sh) e impostare + x permesso:

./screen.sh TEST ./test.pl 

... ed eseguirà ./test.pl e creare un file di log in /var/log/TEST.log

+0

Grazie - la parte "al volo" è super utile. –

+0

In seguito, una schermata eseguita durante la notte con un file di configurazione creato ed eliminato al volo errato su uno 'schermo -r' con' "Impossibile aprire" /tmp/log.conf "'. Inoltre, lo schermo è passato da ' [scollegato] 'stato inesistente.Che cosa avrebbe potuto essere il problema? –

+1

Cosa fa il tuo comando? schermo ricreerà il file di registro quando manca, quindi sto indovinando/tmp/esaurito lo spazio o aveva qualche altro OS problema correlato? Utilizzo questo approccio in diversi server che funzionano a tempo indeterminato e finora non ho visto una situazione simile in almeno 1 anno. Se vuoi possiamo iniziare una chat e posso aiutarti a eseguire il debug del tuo problema – lepe

4

Ctrl + A quindi Maiusc + H funziona per me. È possibile visualizzare il file screenlog.0 mentre il programma è ancora in esecuzione.

2

le seguenti opere di comando per schermo versione 4.06.02

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed 

Da pagina man della schermata:

-Logfile file : By default logfile name is "screenlog.0". 
       You can set new logfile name with the "-Logfile" option. 

È possibile controllare la versione esistente di schermo utilizzando -version schermo. È possibile scaricare e installare l'ultima versione della schermata da https://www.gnu.org/software/screen/.