2016-08-27 3 views
0

Ich habe ein Build-Skript, in dem ich irgendwann make -j4 anrufen. Ich möchte jedoch nicht jedes Mal seine gesamte Ausgabe sehen; außer wenn ein Fehler vorliegt. Wie kann ich also die Ausgabe von make puffern und sie drucken, wenn sie ein Ergebnis ungleich null liefert?In Bash, wie kann ich die Ausgabe eines Befehls NUR anzeigen, wenn ein Fehler vorliegt?

+1

Wenn es einen Fehler gibt, wird es auf stderr sein. Machen Sie einfach 'make -j4>/dev/null' –

+1

Was ich versuchte zu erreichen, war, die gesamte Ausgabe bei einem Fehler anzuzeigen, nicht nur, was auf stderr war. – kubuzetto

Antwort

2

die Ausgabe in einer Variablen speichern war - und Druck auf Fehler

cmdout=$(make -j4 2>&1) 
es=$? 
if ((es)); then 
    echo >&2 "make error es $es: \"$cmdout\"" 
else 
    echo "make success" 
fi 
+0

Ist 'if ((es)); dann stimmt der Teil? Sollte es "$ es" sein? – kubuzetto

+0

In arithmetischen Bedingungen ((...)) können Sie nur Variablen mit ganzzahligen Werten verwenden und das Dollarzeichen "$" ist optional - ein weiterer Unterschied zu [[...]] besteht darin, dass kein vorangestelltes und nachfolgendes Leerzeichen benötigt wird ((...)) – pakistanprogrammerclub

+0

Toller Tipp, danke! – kubuzetto

1

Speichern Sie die Ausgabe in eine temporäre Datei

tmp=$(mktemp) 
make -j4 &> "$tmp" 

und es nur zeigen, wenn ein Fehler

if (($?)) ; then 
    cat "$tmp" 
fi 
rm "$tmp" 
+0

Kann das gleiche Verhalten erreicht werden, ohne eine externe Datei zu erstellen? – kubuzetto

+1

Btw +1 für mktemp, ich kannte diesen Befehl nicht! – kubuzetto

+1

Sie können die Ausgabe auch in einer Variablen speichern, indem Sie 'output = $ (make -j4 2> & 1)'. Aber es kann ziemlich groß werden. – choroba

Verwandte Themen