In meinem Projekt habe ich folgenden Ausschnitt:
local output="$(bash "${1##*/}")"
echo "$?"
Dies gibt immer Null aus local
, da das Entfernen jedoch dazu führt, local
dass sich die $?
Variable korrekt verhält: Dies bedeutet , dass der Exit-Code aus der Subshell übernommen wird.
Meine Frage ist: Wie kann ich diese Variable lokal halten und gleichzeitig den Exit-Wert erfassen?
bash
variable
exit-status
Ultimativer Falke
quelle
quelle
shellcheck
wird dieses Problem nicht nur beheben, sondern die Lösung auch unter unix.stackexchange.com/a/281749/24718 vorschlagen !Antworten:
Dies gibt
127
den korrekten Fehlercode für "Befehl nicht gefunden" wieder.Sie können
local
mehr als eine Variable definieren. Also erstelle ich einfach auch die lokale VariableRET
, um den Exit-Code der Subshell zu erfassen, bevor dieslocal
erfolgreich ist und$?
auf Null gesetzt wird.quelle
bash
dieser Ausdruck von links nach rechts ausgewertet wird?bash
dem Referenzhandbuch Informationen dazu finden .Deklarieren Sie die lokale Variable, bevor Sie sie zuweisen:
Meiner Meinung nach ist dies auch besser lesbar als das Setzen einer zusätzlichen
RET
Variablen. YMMV darauf, aber es funktioniert genau so, wie Sie es erwarten würden.quelle
local var1 var2 ...
und Bob ist Ihr Onkel.