Como "set -e" funciona com subshells?
Eu queria saber seset -e
propaga-se por meio de subcascas (ou seja, uma subcamada herda a-e
configuração de seu pai), então fiz alguns experimentos. Encontrei alguns resultados estranhos que não posso explicar.
Primeiro, aqui estão alguns testes básicos. Eles retornam o que eu espero.
( true; false ) # 1
( false; true ) # 0
( set -e; false; true ) # 1
Agora eu tentei o que acontece se eu colocar um subshell dentro dele. Essa expressão retorna 1, o que sugere que ela se propaga.
( set -e; ( false; true ) )
Então eu tentei essas expressões. Eu esperava que eles retornassem 1, mas descobri que eles retornavam 0.
( set -e; ( true; false ); true )
( set -e; ( set -e; false; true ); true )
Por quê? Nos dois casos, o subshell interno retorna 1, sejaset -e
propaga ou não (como verifiquei no início). O subshell externo possuiset -e
, o que significa que deve falhar após a saída do subshell interno, mas não ocorre. Alguém pode explicar isso?