2010-12-14 9 views
19

Ich möchte ein Shell-Skript machen, das effektiv die letzten n Zeilen von sterr und stin ergreift, die an die Konsole ausgegeben wurden. Ich habe einen Bildschirm Sitzung einen Prozess ausgeführt wird, wird es neu starten, wenn es über einen Hacky Endlosschleife stürzt:nimm letzte n Zeilen von der Konsolenausgabe

#!/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 

Was ich brauche, ist für die 7. Zeile des Codes der letzten 10 oder so Linien von stderr und stdin zu greifen und fügen Sie sie in eine Protokolldatei

Antwort

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

tail -10 werden Sie letzten zehn Zeilen geben, 2>&1 leitet stdout zu stderr, >>logfle anhängt zu Logfile.

+1

danke! eine kleine Änderung: ./run_some_process 2> & 1 | tail -10 >> logfle Sieht so aus, als ob stderr zu stdout gehen müsste, damit es zur Pipe kommt. – Hersheezy

+0

Oh ja Entschuldigung, mein Fehler ^^ " –