Seu primeiro comando,
echo foo > /tmp/bar & exit
inicia um subshell em segundo plano para executar echo foo > /tmp/bar
e sai (o shell em primeiro plano). Isso fecha seu terminal, da mesma maneira que simplesmente digitar exit
. O escudo de fundo não ficará por muito tempo, então você não terá uma corrida; mas se você fizer isso com um comando de execução mais longa, dependendo do seu shell e de suas opções, você terá comportamentos diferentes:
sleep 60 & exit
pode não sair, mas reclamar que você tem trabalhos em execução.
Em ambos os casos, o shell imprime uma linha do formulário [1] 7149
, mas se o seu terminal fechar, você não terá tempo de vê-lo.
Seu segundo comando,
exit & echo foo > /tmp/bar
inicia um subshell em segundo plano para executar exit
, que sai (do subshell) e executa echo foo > /tmp/bar
. Então o shell “principal” não sai e o terminal fica aberto, o que permite que você veja
[2] 13777
seguido por
exit
(impresso pela saída do shell) e depois
[1]+ Done exit
(impresso pelo shell principal quando o shell de fundo sai).