Parece um bug em vários shells, funciona como esperado com o ksh93 e o zsh .
Fundo:
A maioria das conchas parece executar o loop while dentro do shell principal e
O Bourne Shell suspende o shell inteiro se você digitar ^ Z com um shell sem login
o bash suspende apenas o sleep
e depois deixa o loop while em favor da impressão de um novo prompt de shell
o traço torna este comando não suspenso
Com o ksh93 , as coisas funcionam de maneira muito diferente:
O ksh93 faz o mesmo, enquanto o comando é iniciado pela primeira vez, mas como sleep
ocorre no ksh93, o ksh93 possui um manipulador que faz com que o loop while bifurque o shell principal e suspenda no momento em que você digita ^ Z.
Se você digitar mais tarde o ksh93fg
, o filho bifurcado que ainda executa o loop será continuado.
Você vê a principal diferença ao comparar as mensagens de controle de tarefas do bash e do ksh93:
relatórios do bash :
[1]+ Stopped sleep 1
mas o ksh93 informa:
^Z[1] + Stopped while true; do echo .; sleep 1; done
O zsh se comporta de maneira semelhante ao ksh93
Nos dois shells, você tem um único processo (o shell principal), desde que não digite ^ Z, e dois processos de shell após digitar ^ Z.
$?
retorno, e assimtrue
não étrue
. provavelmente. eu acho que.