Das Grundgerüst
Diese vier Zeilen an den Anfang jedes Skripts, das mehr als drei Befehle enthält. Sie fangen die Mehrzahl aller stillen Fehler ab.
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
# -e bricht ab, sobald ein Befehl fehlschlägt
# -u bricht ab bei Verwendung nicht gesetzter Variablen
# -o pipefail lässt eine Pipe fehlschlagen, wenn IRGENDEIN Teil scheitert
# (ohne diese Option zählt nur der letzte Befehl der Pipe)Ohne pipefail gilt false | true als erfolgreich. Genau darüber laufen Backup-Skripte jahrelang scheinbar sauber, während der erste Teil der Pipe längst scheitert.
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
# Bei Bedarf auch auf Abbruch reagieren
trap 'echo "Abgebrochen" >&2; exit 130' INT TERMtrap ... EXIT läuft auch bei einem Abbruch durch set -e. Damit bleiben keine temporären Verzeichnisse liegen, egal an welcher Stelle es schiefgeht.