Capture o resultado da função bash e permita que ela saia

Capture o resultado da função bash e permita que ela saia

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 crashem um subshell, portanto, exitaplica-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

informação relacionada