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 foo
dass 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, false
wenn der ursprüngliche Befehl fehlschlägt.