Eu tenho algumas condições para executar algum trabalho em segundo plano:
condition-command && condition-command && background-job &
O problema é: eu quero que as condições sejam bloqueadas até que o trabalho seja executado, como se eu tivesse executado:
condition-command; condition-command; background-job &
Mas não é uma condição, se o comando anterior falhar, não quero que o trabalho seja executado.
Eu percebi que é assíncrono, mas não deve, na minha opinião, os dois scripts seguintes devem ser os mesmos, mas eles não:
sleep 2; echo foo & sleep 1; echo bar; wait # prints foo, then bar: correct
sleep 2 && echo foo & sleep 1; echo bar; wait # prints bar, then foo: bug
Eu sei se eu testar a variável $?
que funcionaria, ou se eu colocar a última dentro de uma subshell (mas eu perderia controles de trabalho, eu quero evitar daemons), mas eu quero saber por que bash make desta forma, onde é documentado? Existe alguma maneira de evitar esse comportamento?
Editar: Acorrentado if
s é nojento, é por isso que não aceitarei isso como uma forma alternativa.
Editar 2: Conheço um subshell é possível, mas não vai funcionar para mim, vamos imaginar que eu quero executar um monte de comandos, em seguida, wait
no final. Será possível se eu verificar a existência do diretório /proc/$PID
, mas seria uma dor no pescoço se houver vários trabalhos.
Editar 3: A questão principal é PORQUE o bash faz onde está documentado? Se tem ou não uma solução, é um bônus!