Dieses Beispiel auf Mac El Capitan mit bash getestet wurdebash Befehl Substitution externe Skriptfunktion empfängt falschen Exit-Status
main_script.sh:
HINWEIS: func_a und func_b identisch sind mit Ausnahme der Linie, Die lokale Variable
output
ist deklariert.
func_a() {
local output
output="$(./external.sh some_function)"
if [ $? -eq 0 ];then
echo "A zero result ($?) -> $output <- end"
else
echo "A other result ($?) -> $output <- end"
fi
}
func_b() {
local output="$(./external.sh some_function)"
if [ $? -eq 0 ];then
echo "B zero result ($?) -> $output <- end"
else
echo "B other result ($?) -> $output <- end"
fi
}
func_a
func_b
external.sh:
some_function() {
echo "this is the output"
return 1
}
"[email protected]"
Wenn ich laufen main_script die Ausgabe lautet:
würdeA other result (1) -> this is the output <- end
B zero result (0) -> this is the output <- end
Aus welchem Grund die Deklaration einer lokalen Variablen auf der gleichen Linie wie die Befehlserteilung beeinflusst die Ergebnisse? Könnte das ein Fehler sein oder fehle ich etwas?
Dies könnte helfen: [Wie ein Bash-Skript zu debuggen?] (Http://unix.stackexchange.com/q/155551/74329) – Cyrus
Gut bewusst, wie ein Bash-Skript zu debuggen und was Set -x tut. Ich habe einfach versucht, die Ausgabe so klar wie möglich zu machen. Ich weiß, was das Problem ist, jetzt frage ich mich warum. Scheint, eine lokale Var zu deklarieren, gibt null zurück, egal was. Scheint wie ein Bash Bug? – arctelix