Como o sh-e interage com &?

5

Estou usando sh ( dash ) no Ubuntu (lucid) e a manpage tem isto a dizer sobre -e :

           -e errexit       If not interactive, exit immediately if any untested command fails.
                            The exit status of a command is considered to be explicitly tested
                            if the command is used to control an if, elif, while, or until; or
                            if the command is the left hand operand of an “&&” or “||” opera‐
                            tor.

O que acontece quando um comando em segundo plano falha? E bash se comporta de maneira diferente a esse respeito?

    
por r3m0t 04.10.2012 / 12:39

1 resposta

5

É muito simples testar isso. Com -e :

% bash -e -c 'false & echo waiting; if wait $!; then echo success; else echo failure; fi'
waiting
failure

Portanto, se um comando em segundo plano falhar, o shell não sairá automaticamente ( -e não é suficiente).

Se você wait estiver fora de um teste explícito, wait retornará o código de retorno do processo em segundo plano com falha. Nesse caso, se -e for especificado, o shell sairá:

% bash -e -c 'false & echo waiting; wait $!; echo returned'   
waiting

Mesmos resultados com bash ou sh ou zsh .

    
por 04.10.2012 / 13:03