====== Abfangen von Signalen ======
Um das Skript vor vorschnellem Abbruch durch **Signale** zu schützen, müssen wir diese **abfangen** und **behandeln**. Unsere Reaktion wird beispielsweise sein, dass wir rasch alle temporären Dateien/Verzeichnisse löschen und anschließend das Skript verlassen. Bei den Signalen beschränken wir uns auf **SIGINT** (Nummer 2; Tastaturinterrupt) und **SIGTERM** (15). Ein **trap**-Aufruf zu Beginn unseres Skripts ist alles, was wir tun müssen.
#!/bin/sh
trap 'test -e /tmp/etc$$ && rm -r /tmp/etc$$; exit 0' 2 15
Wann immer eines der beiden Signale (hier 2 und 15) auf den Prozess einherfällt, wird **trap** das temporäre Verzeichnis samt Inhalt entfernen (**rm -r /tmp/etc$$**) - falls es existiert (**test -e /tmp/etc$$**) - und das Skript beenden (**exit 0**).
Sie können **trap** ebenso verwenden, um bestimmte Signal zu ignorieren. Wählen Sie hierfür eine der beiden Syntaxvarianten:
trap "" 2 3 15 19
# Alternativ:
trap : 2 3 15 19
Weitere Beispiele:
trap "echo SIGINT nicht erlaubt" INT
trap "echo SIGTERM nicht erlaubt" TERM
trap "echo SIGTSTP nicht erlaubt" TSTP
Um in einem Skript die Behandlung von Signalen wieder zuzulassen, ist ein Aufruf von **trap ohne Argumente** erforderlich.
----
Stand: 05.11.2009
EOF