Relacionados: link
Não é um bug que você não pode sair de um script ou retornar de uma função por exit
ou return
em subshells. Eles são executados em outro processo e não afetam o processo principal.
Além disso, suponho que você esteja vendo comportamentos não documentados de bash em especificações (provavelmente) indefinidas. Em uma função, nenhum erro é declarado para return
no nível superior dos comandos subshell e apenas se comporta como exit
.
IMHO é um erro bash para o comportamento inconsistente de return
dependendo se a declaração principal está em uma função ou não.
#!/bin/bash
o() {
# Runtime error, but no errors are asserted,
# each $? is set to the return code.
echo | return 10
echo $?
(return 11)
echo $?
# Valid, each $? is set to the exit code.
echo | exit 12
echo $?
(exit 13)
echo $?
}
o
# Runtime errors are asserted, each $? is set to 1.
echo | return 20
echo $?
(return 21)
echo $?
# Valid, each $? is set to the exit code.
echo | exit 22
echo $?
(exit 23)
echo $?
Saída:
$ bash script.sh
10
11
12
13
script.sh: line 20: return: can only 'return' from a function or sourced script
1
script.sh: line 22: return: can only 'return' from a function or sourced script
1
22
23