Em bash
e a maioria dos shells, ao contrário de zsh
,
cmd1 || cmd2 &
é como:
{ cmd1 || cmd2; } &
Então é esse subshell executando cmd1 || cmd2
que é iniciado em segundo plano.
bash
não otimiza executando cmd2
no processo subshell, e é por isso que você vê dois processos: o processo bash
e cmd2
. O processo bash
está aguardando apenas que cmd2
termine. Observe que o shell de chamada não está bloqueado. O único "problema" é esse processo de subconsumo desnecessário extra e o fato de que cmd1
também é executado em segundo plano.
Uso:
cmd1 || { cmd2 &}
Ou mais legivelmente:
if ! cmd1; then
cmd2 &
fi
Se você quiser que apenas cmd2
seja executado em segundo plano.