C'est bien le comportement normal, car "piper" tout le bloc while est équivalent à le mettre entre parenthèses, c'est à dire l'exécuter dans un sous-shell.
L'exit sort donc bien du script en cours d'exécution, c'est-à-dire juste le while.
De la même façon, tu ne saurais pas, à l'intérieur de ta boucle while, changer des variables et récupérer leur valeur après, elles sont perdues car elles étaient définies dans le sous-shell.
C'est le même problème avec un "while read" qui lit la sortie d'une autre commande.
Par contre c'est différent avec les redirections, donc tu pourrais arriver presque au même résultat en jouant avec un tube nommé (man mkfifo):
#!/bin/sh
# http://www.chezmoicamarche.org/
Posté par wismerhill . En réponse au message exit qui exit pas. Évalué à 8.
L'exit sort donc bien du script en cours d'exécution, c'est-à-dire juste le while.
De la même façon, tu ne saurais pas, à l'intérieur de ta boucle while, changer des variables et récupérer leur valeur après, elles sont perdues car elles étaient définies dans le sous-shell.
C'est le même problème avec un "while read" qui lit la sortie d'une autre commande.
Par contre c'est différent avec les redirections, donc tu pourrais arriver presque au même résultat en jouant avec un tube nommé (man mkfifo):
#!/bin/sh
if ! [ -e plop.fifo ];then
mkfifo plop.fifo
fi
cat plop.fifo &
while true
do
echo plop
exit 1
done >plop.fifo
echo fin