Ich habe eine /bin/foo
Shell-Skriptdatei.
Wie beende ich ein Shell-Skript im Fehlerfall UND sende dem Benutzer eine Nachricht?
Wenn ich einfach ein verwende, set -e
wird es bei einem Fehler beendet, aber es werden keine Befehle ausgeführt, wenn ein Fehler auftritt, wie das Senden einer Nachricht an STDOUT oder das Senden einer E-Mail.
Die Frage: Wie führe ich einen Befehl aus, wenn beim Ausführen des Shell-Skripts ein Fehler auftritt?
SLES12, Bash.
Antwort1
Sie können eine Funktion erstellen, um Ihrem Benutzer eine Nachricht zu senden und trap
diese auszuführen, wenn das Skript fehlerhaft beendet wird:
#!/bin/bash
set -e
on_exit () {
echo "This script has exited in error"
}
trap on_exit ERR
echo 'yes' | grep "$1"
In Benutzung:
$ ./script.sh yes
yes
$ ./script.sh no
This script has exited in error
Antwort2
Wenn Sie möchten, dass es auch auf dem alten SH funktioniert (statt nur auf Bash):
#!/bin/sh
set -e
trap 'test $? -gt 0 && echo "This script has exited in error" >&2' 0
echo 'yes' | grep "$1"