Esto parece un error en varios shells, funciona como se esperaba con ksh93 y zsh .
Antecedentes:
La mayoría de los shells parecen ejecutar el ciclo while dentro del shell principal y
Bourne Shell suspende todo el shell si escribe ^ Z con un shell sin inicio de sesión
bash suspende solo el sleep
y luego deja el bucle while a favor de imprimir un nuevo indicador de shell
el guión hace que este comando no se pueda suspender
Con ksh93 , las cosas funcionan de manera muy diferente:
ksh93 hace lo mismo, mientras que el comando se inicia la primera vez, pero como sleep
es un buitin en ksh93, ksh93 tiene un controlador que hace que el bucle while se bifurque en el shell principal y luego se suspenda en el momento en que escribe ^ Z.
Si en ksh93 escribe más tarde fg
, el hijo bifurcado que aún ejecuta el bucle continúa.
Verá la principal diferencia al comparar los mensajes de control de trabajo de bash y ksh93:
informes de bash :
[1]+ Stopped sleep 1
pero ksh93 informa:
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh se comporta de manera similar a ksh93
Con ambos shells, tiene un solo proceso (el shell principal) siempre que no escriba ^ Z, y dos procesos de shell después de escribir ^ Z.
$?
al regresar, y entoncestrue
no es asítrue
. probablemente. Yo creo que.