Übergeben Sie den Exit-Statuscode nach der Verwendung von ||

Übergeben Sie den Exit-Statuscode nach der Verwendung von ||

Ich möchte einen Alias ​​schreiben, der ungefähr so ​​aussieht:

alias baz="false || echo bar"

(Das ist es eigentlich nicht false, es ist ein Befehl, der fehlschlagen kann). Ich möchte jedoch den Statuscode „Fehlgeschlagen“ an den nächsten Aufrufer weitergeben. Mit anderen Worten, hier ist das aktuelle Verhalten:

$ false; echo $?
1
$ false || echo foo; echo $?
0

Ich möchte eine andere Operation ausführen, die in jeder Hinsicht dasselbe Verhalten wie aufweist false || echo foo, außer dass in diesem Fall echo $?zurückgegeben wird 1.

Notiz:Ich gehe davon aus, echo foodass dieser Schritt grundsätzlich immer erfolgreich ist.

Antwort1

Eine Funktion zum Speichern des Rückgabewertes eines Befehls ist nicht allzu kompliziert:

f() {
    some-command-that-can-fail
    retval=$?
    if [ "$retval" != 0 ] ; then
         echo the command failed
    fi
    return $retval
}

Wenn Sie sich nicht für den genauen Rückgabewert interessieren, sondern nur einen Rückgabecode ungleich Null wünschen, würde Folgendes funktionieren:

somecmd || ( echo it failed ; false )

Sie benötigen die Subshell (oder einen zusammengesetzten Block), um das Finale nur auszuführen, falsewenn der ursprüngliche Befehl fehlschlägt.

verwandte Informationen