
Esta função deve sair do script de chamada:
crash() {
echo error
exit 1
}
Isso funciona conforme o esperado:
echo before
crash
echo after # execution never reaches here
Mas isso não acontece:
echo before
x=$(crash) # nothing is printed, and execution continues
echo after # this is printed
Como capturo o resultado de uma função e também permito que ela saia?
Responder1
Isso ocorre porque $(crash)
é executado crash
em um subshell, portanto, exit
aplica-se ao subshell e não ao seu script.
Qual é o sentido de capturar a saída em uma variável se você não vai usá-la porque o script foi encerrado mesmo assim?
Responder2
Isso deve resolver seu problema:
echo before
x=$(crash) || exit # if crash give -gt 0 value then exit with the same value
echo after