Fehlerkanal, Fehlersuche
Zur Navigation springen
Zur Suche springen
Fehlerkanal und Fehlersuche
In der Bash gibt es verschiedene sogenannte Standard-Streams, über die Programme Daten senden oder empfangen. Diese sind für die Fehleranalyse und das Debugging von Skripten besonders wichtig.
Standard-Streams
| Kanal | Beschreibung | Datei-Deskriptor |
|---|---|---|
| Standard Input | Eingabe (z. B. Tastatur, Datei) | 0 |
| Standard Output | Normale Ausgabe von Befehlen | 1 |
| Standard Error | Fehlermeldungen von Befehlen | 2 |
- Unter Linux werden alle drei Kanäle als Dateien behandelt.
- Sie können getrennt voneinander umgeleitet oder in Dateien geschrieben werden.
Beispiel: Standard- und Fehlerausgabe trennen
- ls /etc /nichtda
→ listet den Inhalt von /etc auf, zeigt aber für /nichtda eine Fehlermeldung auf STDERR.
- Nur Fehlerausgabe in Datei schreiben
- ls /etc /nichtda 2> fehler.txt
- Nur Standardausgabe in Datei schreiben
- ls /etc /nichtda 1> ausgabe.txt
- Beide Ausgaben in eine Datei umleiten
- ls /etc /nichtda > alles.txt 2>&1
Fehlerkanäle im Skript verwenden
- In Skripten kann die Fehlerspur zur Diagnose in eine Datei geschrieben werden.
- So kann ein Administrator den Ablauf später nachvollziehen.
- Beispiel
#!/bin/bash
echo "Starte Backup..."
tar czf /backup/etc.tgz /etc 2> /var/log/backup-error.log
echo "Fertig."
- In der Datei /var/log/backup-error.log werden nur Fehlermeldungen gespeichert.
Debugging von Skripten
- Bash bietet verschiedene Möglichkeiten, um Skripte schrittweise oder mit zusätzlicher Ausgabe zu debuggen.
- Syntaxprüfung ohne Ausführung
- bash -n skript.sh
→ prüft nur die Syntax, führt das Skript aber nicht aus.
- Debugmodus mit Kommandoanzeige
- bash -x skript.sh
→ zeigt jedes ausgeführte Kommando vor der Ausführung an.
- Innerhalb eines Skripts aktivieren
#!/bin/bash
set -x # Debugmodus aktivieren
echo "Starte"
ls /nichtda
set +x # Debugmodus deaktivieren
Typische Vorgehensweise bei Fehlersuche
- Syntax mit bash -n prüfen.
- Skript im Debugmodus (bash -x) ausführen.
- Fehlerkanäle gezielt in Logdateien umleiten.
- Rückgabewert mit echo $? auswerten.
- Schrittweise Befehle isolieren und testen.
Hinweis
- Fehlermeldungen über STDERR werden nicht von der Standardausgabe beeinflusst.
- Durch sauberes Trennen von Standard- und Fehlerkanal lässt sich die Ausgabe von Skripten deutlich besser kontrollieren und auswerten.
Aufgaben
Standard- und Fehlerausgabe trennen
- Führen Sie den folgenden Befehl aus und beobachten Sie die Ausgaben:
ls /etc /nichtda
- Leiten Sie anschließend nur die Fehlermeldung in eine Datei um:
ls /etc /nichtda 2> fehler.txt
- Öffnen Sie die Datei fehler.txt mit cat und prüfen Sie den Inhalt.
Ausgaben kombinieren
- Erzeugen Sie eine gemeinsame Datei, in der sowohl Standard- als auch Fehlerausgabe stehen:
ls /etc /nichtda > alles.txt 2>&1
- Kontrollieren Sie die Ausgaben mit cat alles.txt.
- Vergleichen Sie den Inhalt mit der vorherigen Datei fehler.txt.
Skript debuggen
- Erstellen Sie ein einfaches Skript namens fehler.sh mit folgendem Inhalt:
#!/bin/bash
echo "Starte Test"
ls /nichtda
echo "Beendet"
- Prüfen Sie das Skript zuerst auf Syntaxfehler:
bash -n fehler.sh
- Führen Sie das Skript anschließend im Debugmodus aus:
bash -x fehler.sh
- Beobachten Sie, welche Befehle im Debugmodus angezeigt werden.