Gibt es eine ähnliche Option in der Dash Shell, die dem Pipefail in bash entspricht?Entsprechung von Pipefail in Dash Shell
Oder eine andere Möglichkeit, einen Nicht-Null-Status zu erhalten, wenn einer der Befehle in der Pipe fehlschlägt (aber nicht darauf, welcher Satz -e würde).
es deutlicher zu machen, hier ist ein Beispiel dafür, was ich erreichen möchte:
In einer Probe Debuggen Make-Datei, sieht meine Regel wie folgt aus:
set -o pipefail; gcc -Wall $$f.c -o $$f 2>&1 | tee err; if [ $$? -ne 0 ]; then vim -o $$f.c err; ./$$f; fi;
Im Grunde läuft es öffnet die Fehlerdatei und Quelldatei bei Fehler und führt die Programme aus, wenn kein Fehler vorliegt. Spart mir etwas tippen. Über Snippet funktioniert gut auf bash, aber mein neuere Ubunty-System verwendet das Dash, das die Option pipefail nicht zu unterstützen scheint.
Ich mag im Grunde einen Fehlerstatus, wenn der erste Teil der folgenden Gruppe von Befehlen fehlschlagen:
gcc -Wall $$f.c -o $$f 2>&1 | tee err
so, dass ich das für die IF-Anweisung verwenden kann.
Gibt es alternative Möglichkeiten, dies zu erreichen?
Danke!
Warum nicht einfach von der 'tee' loswerden? 'if gcc -Wall $$ f.c -o $$ f> $$ f.log 2> & 1; dann Katze $$ f.log; ./$$f; sonst vim -o $$ f.c $$ f.log; fi '(Alternativ installieren Sie' bash 'auf Ubunty. Es ist nur ein apt-get weg.) – rici
@rici Vielen Dank! Ich benutzte Tee, weil ich auch wollte, dass die stderr-Ausgabe auf dem Bildschirm gedruckt wurde - hauptsächlich um zu sehen, ob es irgendwelche Warnungen gab. Aber wenn es keinen anderen Weg gibt, werde ich wahrscheinlich zu dem wechseln, was Sie vorgeschlagen haben. Über die Installation von bash: Ich hatte (ohne jegliche Nachforschungen) angenommen, dass Dash ein Schritt vorwärts von Bash ist, also wollte ich nicht zurückschalten, aber jetzt googeln ein bisschen darüber scheint, dass das nicht unbedingt so sein muss. Ich werde ein wenig mehr über die Unterschiede lesen und dann entscheiden. Nochmals vielen Dank für Ihre Hinweise! – Lavya
Ich hatte gehofft, dass das Set -e, das oben erwähnt wurde, mir ein Dash-Äquivalent von Set -o-Pipefail liefern würde, aber nicht so: '$ dash -c 'set -e; falsch | Katze'; echo $? $ ' –