trampa de script bash para salir y errar y lógica para la diferencia

trampa de script bash para salir y errar y lógica para la diferencia

Tengo un script bash y me gustaría agregar la capacidad de capturar condiciones de SALIDA y ERR. La estructura es actualmente

trap cleanup EXIT

function notify(reason) {}
function build {}
function dbops {}
function deploy {}
function cleanup {}

notify('start') \
&& build \
&& dbops \
&& deploy \
&& notify('finished');

¿Cuál es la forma recomendada de agregar una trampa para un error y (opcionalmente) capturar el motivo de salida y enviarlo a través de la función de notificación? En este momento, todo lo que hace la limpieza es eliminar el archivo de bloqueo al SALIR.

Quiero poder enviar un notify(reason)mensaje a Slack si el script falla inesperadamente, pero no enviarlo en la SALIDA normal.

¿Mi encadenamiento de ejecución interferirá con la captura adecuada de errores?

Respuesta1

No puede detectar errores con trap ... ERRcomandos cuyo código de salida se haya probado. En su caso particular, desde la página de manual de bash:

La trampa ERR no se ejecuta si el comando fallido es... parte de un comando ejecutado en && o || lista excepto el comando que sigue al && final ...

En términos generales, la forma más sencilla de garantizar la limpieza de un conjunto de funciones es ejecutarlas todas en un subshell y, como sea que salga, aún puede realizar la limpieza.

información relacionada