J'ai une petite section de code qui lit un fichier, $ FUNCTION_FILE, qui contient une liste de noms de fonctions au format:
func1
func2
func3
Il lira une ligne, exécutera la fonction et répétera jusqu'à ce que le fichier soit terminé. Voici un extrait:
while read line; do
LINE_NUMBER=`expr $LINE_NUMBER + 1`
echo "LINE_NUMBER=$LINE_NUMBER"
$func
done <$FUNCTION_FILE
Je me suis trouvé dans une situation où parfois cette section de code cesse de lire "$ FUNCTION_FILE" avant de terminer et continue avec le reste du script. Parfois, il ne lit que la première ligne et ignore le reste, parfois, la deuxième ligne seulement; Je ne vois jamais le message "LINE_NUMBER = $ LINE_NUMBER" pour les lignes suivantes.
En supposant que le fichier soit correct, quelles sont les causes possibles du problème que je vois?
exit
?$func
sont. S'il vous plaît nous montrer les fonctions réelles que vous exécutez, il n'y a aucun moyen que nous pouvons aider autrement.Réponses:
Est-ce que l'une de vos fonctions lit depuis stdin (ex: la
read
commande)? Si tel est le cas, le reste de FUNCTION_FILE sera lu.Changez la boucle while pour utiliser un descripteur de fichier différent:
Sortez de l'habitude d'utiliser ALL_CAPS_VARIABLES. Un jour, vous utiliserez accidentellement "PATH" et interromprez votre script.
la source