
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 crash
en un subshell, por lo que exit
se 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