Capture el resultado de la función bash y permita que salga

Capture el resultado de la función bash y permita que salga

Esta función debería salir del script de llamada:

crash() {
  echo error
  exit 1
}

Esto funciona como se esperaba:

echo before
crash
echo after         # execution never reaches here

Pero esto no:

echo before
x=$(crash)         # nothing is printed, and execution continues
echo after         # this is printed

¿Cómo capturo el resultado de una función y también permito que salga?

Respuesta1

Esto se debe a que $(crash)se ejecuta crashen un subshell, por lo que exitse aplica al subshell y no a su script.

¿Cuál es el punto de capturar la salida en una variable si no la usarás porque el script salió de todos modos?

Respuesta2

Esto debería solucionar tu problema:

echo before
x=$(crash) || exit       # if crash give -gt 0 value then exit with the same value
echo after

información relacionada