2016-05-22 20 views

Antwort

0

Probieren Sie etwas wie folgt aus:

a) fangen die Ausgabe:

OUT=`grep -c test myfile.txt` 

b) umleiten (ohne irgendetwas anderes in der Zwischenzeit zu tun) die Umgebungsvariable OUT nach dem Exit-Status in der Lage spezielle Variable $?:

if [ "$?" -eq 0 ]; 
then 
    echo "succes with output=$OUT"; 
else 
    echo "failure with output=$OUT"; 
fi 

natürlich muss man genau nach dem ersten, um den zweiten Teil stellen ke ep der richtige Wert in $?.

Wenn der Ausgang zu groß ist; leite es zuerst in eine temporäre Datei um und benenne dann die temporäre Datei entsprechend dem Exit-Code um.

+0

Ich muss stderr und stdout separat speichern, damit ich tun kann, wie Sie in b) erwähnt haben, Gibt es eine Möglichkeit? – Starc

+0

Sie können dies tun, indem Sie auf zwei verschiedene temporäre Dateien umleiten. –

1

Leider gibt es keine Möglichkeit, sowohl stdout und stderr zu erfassen und sie in verschiedenen Variablen zu speichern, ohne den Befehl zweimal auszuführen. Stattdessen müssen Sie die Ausgabe in andere temporäre Dateien umleiten und dann die gewünschte Ausgabe basierend auf dem Beendigungscode beibehalten. Zum Beispiel:

#Send the output to different files 
dosomething >tempout 2>temperr 

case $? in 
    0) 
     mv tempout outfile.txt 
     rm temperr;; 
    1) 
     mv temperr outfile.txt 
     rm tempout;; 
    2) 
     mv tempout outfile.txt 
     cat temperr >> outfile.txt 
     rm temperr;; 
    3) 
     var=$(cat tempout) 
     rm tempout temperr 
    #...etc 
esac 

sollte die Aufgabe erledigen. Vergessen Sie nicht, die case-Anweisung abzuschließen, wenn Sie stderr (oder beide) an eine Variable senden möchten.

+0

kann ich/dev/null anstelle einer temporären Datei verwenden und später auf eine Variable umleiten? – Starc

+0

Meinst du damit, die Ausgabe nach/dev/null umzuleiten und sie dann irgendwie zu finden? Es gibt keine Möglichkeit, das zu tun, sobald du etwas an/dev/null schickst, zerschmeißt du es für immer, daher die temporären Dateien. – Ocab19