MWCodebymw.de ↗
Terminal

Robustes Bash-Grundgerüst mit set -euo pipefail

Ein Shell-Skript, das bei Fehlern einfach weiterläuft, ist gefährlich. Mit set -euo pipefail und einem sauberen Grundgerüst bricht dein Skript beim ersten Problem sicher ab.

Standardmäßig macht Bash bei einem Fehler einfach weiter. Für ein Deploy- oder Backup-Skript ist das riskant: Ein fehlgeschlagener Schritt bleibt unbemerkt, und der nächste läuft auf halbfertigem Zustand. Deshalb beginnt bei mir jedes ernsthafte Skript mit derselben Kopfzeile.

Das Grundgerüst

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

# -e : bricht ab, sobald ein Befehl fehlschlägt
# -u : bricht ab, wenn eine nicht gesetzte Variable benutzt wird
# -o pipefail : eine Pipe schlägt fehl, wenn IRGENDEIN Teil fehlschlägt

main() {
  local ziel="${1:-}"
  if [[ -z "$ziel" ]]; then
    echo "Verwendung: $0 <ziel>" >&2
    exit 1
  fi

  echo "Verarbeite: $ziel"
  # ... deine Logik ...
}

main "$@"

Warum jedes Flag zählt

  • -e stoppt das Skript beim ersten fehlgeschlagenen Befehl, statt blind weiterzulaufen.
  • -u deckt Tippfehler in Variablennamen auf: $zeil statt $ziel bricht sofort ab, statt still ins Leere zu greifen.
  • -o pipefail sorgt dafür, dass cat datei | grep muster auch dann fehlschlägt, wenn schon cat scheitert – ohne dieses Flag zählt nur der letzte Befehl der Pipe.

Das IFS=$'\n\t' entfernt das Leerzeichen aus dem Feldtrenner, damit Dateinamen mit Leerzeichen nicht unbeabsichtigt zerteilt werden.

Aufräumen mit trap

Wenn dein Skript temporäre Dateien anlegt, räumst du sie mit trap auch dann auf, wenn es abbricht:

tmp="$(mktemp)"
trap 'rm -f "$tmp"' EXIT

Kleiner Hinweis: set -e hat ein paar Sonderfälle (etwa in if-Bedingungen), aber als Grundgerüst macht diese Kopfzeile deine Skripte sofort deutlich sicherer.

Mit solchen kleinen Deploy- und Automatisierungsskripten halte ich die Websites meiner Kundinnen und Kunden am Laufen. Wenn du Unterstützung bei App, Website oder Automatisierung brauchst, findest du mich auf bymw.de.

Quellen

#set -euo pipefail#Bash#Shell#Skript#Automatisierung

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →