É uma questão de tempo: o bash inicia o hello
comando em segundo plano, depois exibe um prompt para permitir que você insira um novo comando e, em seguida, o comando em segundo plano imprime alguma saída. Quando você insere a próxima linha de comando (uma linha de comando vazia, se você pressionar apenas Enter), o bash exibe a notificação de que o trabalho em segundo plano foi concluído e o próximo prompt.
Convém experimentar um script que comece com sleep 3
e comece a digitar logo após iniciar o script em segundo plano, para ver o que está acontecendo em um ritmo que você pode seguir.
Você pode fazer com que o bash o notifique imediatamente quando um trabalho em segundo plano terminar, definindo a notify
opção com set -b
. Então você verá:
$ set -b
$ hello &
[1] 12345
$ hello world!
[1]+ Done
O Bash não redesenha o prompt nesse caso. Você ainda está editando uma linha de comando na linha de prompt que apareceu antes da impressão do trabalho em segundo plano hello world!
. Você pode redesenhar a linha atual pressionando Esc 1 Ctrl+ L. Você pode vincular o comando redraw-current-line
a uma chave mais conveniente; por exemplo, ter Ctrl+ Lredesenhar a linha atual e Ctrl+ Alt+ Llimpar a tela, adicione as seguintes linhas ao seu ~/.inputrc
:
"\C-l": redraw-current-line
"\e\C-l": clear-screen
Não sei como fazer o bash redesenhar a linha de prompt automaticamente. O Zsh faz isso por padrão.