Dies ist eine Follow-up-Frage zu meinem last question auf Stack-Überlauf. Ich werde das Skript auf die wesentlichen Teile reduzieren, aber wenn s.o. denkt, es könnte hilfreich sein zu wissen, was das Skript macht, Sie können sich die andere Frage ansehen.Bash-Skript beendet unerwartet nach der Rückkehr von Funktion
#!/usr/bin/env bash
set -eu -o pipefail
declare -a framelist
#Print all results
function output_values() {
echo "Results!";
}
#parsing information from stdin
function parser() {
while read tc;
do
if [ -z "$tc" ]; then
continue
fi
#Evaluation and saving result to array
echo $result_value;
framelist+=($result_value);
if ((<<some abort condition>>)); then
exec 0>&-
echo "Last result: $result_value";
return 0
fi
done
}
some_command_writing_to_stdout | parser $2;
output_values;
Das Skript führt den Befehl aus und die Ausgabe über Pipes zu meiner lokalen Funktion, die schließlich ein Ergebnis auf der Linie gibt echo "Last result: $result_value";
wie es beabsichtigt ist, zu tun. Danach soll es den Befehl beenden, der die Daten liefert, die in dieser Funktion analysiert werden - das funktioniert auch.
Wenn ich return 0
erreiche, würde ich denken, die nächste Zeile des Skripts (rechts unterhalb des Befehls) output_values;
sollte ausgeführt werden, ist es aber nicht.
Auch wenn ich die Funktion output_values direkt vor der Echozeile aufruft, die das Ergebnis in der Parserfunktion ausgibt, wird es nicht ausgeführt.
Es wird noch seltsamer, wie ich exec 0>&-
auskommentieren kann und alles verhält sich genauso. Selbst der Befehl, der durch diese Zeile beendet werden soll, wird beendet, sobald die Parser-Funktion beendet wird.
Was muss ich ändern, um mit den Ergebnissen meiner Parser-Funktion nach der Rückkehr arbeiten zu können? Dies kann kein beabsichtigtes Verhalten sein.
Grüße
Manuel
Post ein Beispielcode, die einfach ist, zu arbeiten und produzieren die genaue Versagen – Anubis
Haben Sie versucht, 'set -x'? –
'set -x' zeigt nur das Beenden nach 'return 0' und danach wird nichts mehr ausgeführt. –