Le script de test suivant a un problème. Quand j'ajoute la ligne (sleep 5 ) &
dans le script, la boucle "While read" ne lit pas toutes les lignes du fichier, mais affiche uniquement la première ligne.
Mais quand je retire le ( sleep 5 ) &
à partir du script, le script imprime toutes les lignes telles que définies dans le fichier.
Pourquoi le ( sleep 5 ) &
provoque cela?
Et comment résoudre le problème? Je veux créer un nouveau processus (pour lequel le sleep
est juste un exemple) dans la boucle while:
$ more test
#!/bin/ksh
while read -r line ; do
echo Read a line:
echo $line
( sleep 5 )&
RESULT=$!
echo Started background sleep with process id $RESULT
sleep 1
echo Slept for a second
kill $RESULT
echo Killed background sleep with process id $RESULT
done < file
echo Completed
Sous Linux, lors de l’utilisation du contenu suivant de file
:
$ more file
123 aaa
234 bbb
556 ccc
...fonctionnement ./test
me donne juste:
Read a line: 123 aaa Started background sleep with process id 4181 Slept for a second Killed background sleep with process id 4181 Completed
101010
bouton ou indenter chaque ligne de code quatre espaces, s'il vous plaît. En outre, vous devez marquer certaines réponses comme acceptées.Réponses:
Dans le changelog Ksh pour ksh93s:
Si votre version de ksh est plus ancienne que celle-ci (vous devriez mentionner la version dans votre question!), Vous êtes peut-être en train d'observer ce bogue.
la source