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