Cela ressemble à un bogue dans plusieurs shells, il fonctionne comme prévu avec ksh93 et zsh .
Contexte:
La plupart des shells semblent exécuter la boucle while à l'intérieur du shell principal et
Bourne Shell suspend le shell entier si vous tapez ^ Z avec un shell sans connexion
bash suspend uniquement le sleep
puis quitte la boucle while pour imprimer une nouvelle invite shell
le tiret rend cette commande indéfendable
Avec ksh93 , les choses fonctionnent très différemment:
ksh93 fait de même, tandis que la commande est lancée la première fois, mais comme sleep
c'est le cas dans ksh93, ksh93 a un gestionnaire qui fait que la boucle while déborde du shell principal puis se suspend au moment où vous tapez ^ Z.
Si vous tapez ksh93 ultérieurement fg
, l'enfant dérivé qui exécute toujours la boucle se poursuit.
Vous voyez la principale différence lorsque vous comparez les messages de jobcontrol de bash et ksh93:
rapports bash :
[1]+ Stopped sleep 1
mais ksh93 rapporte:
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh se comporte comme ksh93
Avec les deux shells, vous avez un seul processus (le shell principal) tant que vous ne tapez pas ^ Z, et deux processus de shell après avoir tapé ^ Z.
$?
du retour, et cetrue
n'est pas le cas alorstrue
. Probablement. je pense.