Sembra un bug in diverse shell, funziona come previsto con ksh93 e zsh .
Sfondo:
La maggior parte delle shell sembrano eseguire il ciclo while all'interno della shell principale e
Bourne Shell sospende l'intera shell se si digita ^ Z con una shell non di accesso
bash sospende solo il sleepe quindi lascia il ciclo while in favore della stampa di un nuovo prompt della shell
dash rende questo comando insostenibile
Con ksh93 , le cose funzionano in modo molto diverso:
ksh93 fa lo stesso, mentre il comando viene avviato la prima volta, ma come sleepè un buitin in ksh93, ksh93 ha un gestore che fa in modo che il ciclo while esegua il fork della shell principale e quindi la sospenda nel momento in cui si digita ^ Z.
Se si digita ksh93 in seguito fg, il figlio biforcuto che esegue ancora il ciclo continua.
Si vede la differenza principale quando si confrontano i messaggi jobcontrol da bash e ksh93:
bash segnala:
[1]+ Stopped sleep 1
ma ksh93 riporta:
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh si comporta in modo simile a ksh93
Con entrambe le shell, hai un singolo processo (la shell principale) purché non digiti ^ Z e due processi di shell dopo aver digitato ^ Z.
$?ritorno, e cosìtruenon è alloratrue. probabilmente. credo.