
Tengo un /bin/foo
archivo de script de shell.
¿Cómo salir de un script de Shell en caso de error Y enviar un mensaje al usuario?
Si simplemente uso a, set -e
sale en caso de error, pero no se ejecutan comandos cuando llega al error, como enviar un mensaje a STDOUT o enviar un correo.
La pregunta: ¿cómo ejecutar un comando si el script de shell genera un error?
SLES12, fiesta.
Respuesta1
Puede crear una función para enviar un mensaje a su usuario y utilizarla trap
para que se ejecute cuando el script finalice por error:
#!/bin/bash
set -e
on_exit () {
echo "This script has exited in error"
}
trap on_exit ERR
echo 'yes' | grep "$1"
En uso:
$ ./script.sh yes
yes
$ ./script.sh no
This script has exited in error
Respuesta2
Si quieres que funcione también en sh antiguo (en lugar de solo en bash):
#!/bin/sh
set -e
trap 'test $? -gt 0 && echo "This script has exited in error" >&2' 0
echo 'yes' | grep "$1"