2010-12-14 5 views
19

Voglio creare uno script di shell che catturi efficacemente le ultime n righe da sterr e stin che sono state emesse nella console. Ho una sessione di screen l'esecuzione di un processo che riavviarlo se si blocca tramite un hacky ciclo infinito:utilizza le ultime n righe dall'output della console

#!/bin/bash 
#This script will be started in a screen session 
counter=0 
while [ $counter -lt 10 ]; do 
    ./run_some_process; 
    last_output=#GRAB PREVIOUS OUTPUT FROM CONSOLE HERE AND LOG TO FILE 
    echo -e "$last_output" >> mylog.txt; 
    sleep 5; #sleep for a few seconds before restarting 
done 

cosa ho bisogno è per il 7 ° riga di codice per afferrare gli ultimi 10 o giù di lì le linee da stderr e stdin e li aggiunge ad un file di log

risposta

42
./run_some_process 2>&1 | tail -10 >>logfle 

tail -10 vi darà ultime dieci righe, 2>&1 reindirizza stdout a stderr, >>logfle accoda al file di log.

+1

grazie! un cambio lil: ./run_some_process 2> & 1 | tail -10 >> logfle Sembra che stderr sia necessario per andare allo stdout in modo che possa arrivare alla pipe. – Hersheezy

+0

Oh sì, mi dispiace, mio ​​errore ^^ " –