Wie beende ich ein Shell-Skript im Fehlerfall UND sende dem Benutzer eine Nachricht?

Wie beende ich ein Shell-Skript im Fehlerfall UND sende dem Benutzer eine Nachricht?

Ich habe eine /bin/fooShell-Skriptdatei.

Wie beende ich ein Shell-Skript im Fehlerfall UND sende dem Benutzer eine Nachricht?

Wenn ich einfach ein verwende, set -ewird 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 trapdiese 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"

verwandte Informationen