Ceci est une question complémentaire à mon last question lors d'un débordement de pile. Je vais couper le script pour les parties essentielles, mais si le s.o. pense, il pourrait être utile de savoir ce que le script fait, vous pouvez regarder dans l'autre question.Le script bash se ferme de façon inattendue après le retour de la fonction
#!/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;
Le script exécute la commande et la sortie des tuyaux à ma fonction locale qui retourne enfin un résultat à la ligne echo "Last result: $result_value";
comme il est prévu de le faire. Après cela, il doit terminer la commande qui fournit les données qui sont analysées dans cette fonction - cela fonctionne aussi.
En atteignant return 0
, je pense, la ligne suivante du script (juste en dessous de la commande) output_values;
devrait être exécutée, mais ce n'est pas le cas.
Même si j'appelle la fonction output_values directement avant la ligne d'écho, qui imprime le résultat dans la fonction d'analyseur, elle n'est pas exécutée.
Cela devient encore plus bizarre, car je peux commenter exec 0>&-
et tous se comportent tout de même. Même la commande qui devrait être terminée par cette ligne, se termine, dès que la fonction d'analyseur est quittée.
Que dois-je changer pour pouvoir travailler avec les résultats de ma fonction d'analyseur, après son retour? Cela ne peut pas être un comportement intentionnel.
Cordialement
Manuel
après un exemple de code qui est simple, travailler et produire l'échec exact – Anubis
Avez-vous essayé 'set -x'? –
'set -x' montre juste la sortie après' return 0' et rien n'est exécuté par la suite. –