Ultimamente tenho tido problemas estranhos com o bash. Ao tentar simplificar meu script, vim com esse pequeno pedaço de código:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
return
deveria ter saído da função sem imprimir $?
, não deveria? Bem, então verifiquei se posso retornar de um cano sozinho:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
O mesmo acontece sem um while
loop:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
Há algo que estou perdendo aqui? Uma pesquisa no Google não trouxe nada sobre isso! Minha versão do bash é a versão 4.2.37 (1) no Debian Wheezy.
while
não for necessário para a reprodução? Isso distrai do ponto.
while
loop é um uso muito comum para um pipe return
. O segundo exemplo é mais direto ao ponto, mas é algo que eu não acredito que alguém jamais usaria ...