Salga del script de shell en la función de manejo de errores sin salir de la terminal

Salga del script de shell en la función de manejo de errores sin salir de la terminal

Estoy escribiendo un script de shell. Ese script de shell se ejecuta en un bashshell dentro de una terminal. Contiene una función central de manejo de errores. Consulte el siguiente fragmento de demostración básico:

function error_exit
{
   echo "Error: ${1:-"Unknown Error"}" 1>&2
   exit 1 # This unfortunately also exits the terminal
}

# lots of lines possibly calling error_exit
cd somewhere || error_exit "cd failed"
rm * || error_exit "rm failed"
# even more lines possibly calling error_exit

La función del controlador de errores debería finalizar el script pero NO debería finalizar la terminal. ¿Cómo puedo conseguir esto?

Respuesta1

Utilice bashel comando trapincorporado para generar una bashinstancia al salir del script:

trap 'bash' EXIT

De help trap:

trap: trap [-lp] [[arg] signal_spec ...]
    Trap signals and other events.

    Defines and activates handlers to be run when the shell receives signals
    or other conditions.

    ARG is a command to be read and executed when the shell receives the
    signal(s) SIGNAL_SPEC.  If ARG is absent (and a single SIGNAL_SPEC
    is supplied) or `-', each specified signal is reset to its original
    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the
    shell and by the commands it invokes.

    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.

Entonces, al ejecutar trap 'bash' EXIT, bashse leerá y ejecutará cuando el shell reciba la señal EXIT; En consecuencia, generar un shell interactivo tendrá el efecto de evitar que el terminal se cierre:

function error_exit
{
   echo "Error: ${1:-"Unknown Error"}" 1>&2
   exit 1 # This unfortunately also exits the terminal
}

trap 'bash' EXIT
# lots of lines possibly calling error_exit
cd somewhere || error_exit "cd failed"
rm * || error_exit "rm failed"
# even more lines possibly calling error_exit

información relacionada