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 sleep
e 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ìtrue
non è alloratrue
. probabilmente. credo.