Fehlerkanal, Fehlersuche: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Die Seite wurde neu angelegt: „== Fehlerkanal und Fehlersuche == In der Bash gibt es verschiedene sogenannte '''Standard-Streams''', über die Programme Daten senden oder empfangen. Diese s…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
== Fehlerkanal und Fehlersuche == | == Fehlerkanal und Fehlersuche == | ||
In der Bash gibt es verschiedene sogenannte | 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 === | === Standard-Streams === | ||
| Zeile 20: | Zeile 20: | ||
=== Beispiel: Standard- und Fehlerausgabe trennen === | === Beispiel: Standard- und Fehlerausgabe trennen === | ||
* | * ls /etc /nichtda | ||
→ listet den Inhalt von /etc auf, zeigt aber für /nichtda eine Fehlermeldung auf STDERR. | → listet den Inhalt von /etc auf, zeigt aber für /nichtda eine Fehlermeldung auf STDERR. | ||
;Nur Fehlerausgabe in Datei schreiben | ;Nur Fehlerausgabe in Datei schreiben | ||
* | * ls /etc /nichtda 2> fehler.txt | ||
;Nur Standardausgabe in Datei schreiben | ;Nur Standardausgabe in Datei schreiben | ||
* | * ls /etc /nichtda 1> ausgabe.txt | ||
;Beide Ausgaben in eine Datei umleiten | ;Beide Ausgaben in eine Datei umleiten | ||
* | * ls /etc /nichtda > alles.txt 2>&1 | ||
=== Fehlerkanäle im Skript verwenden === | === Fehlerkanäle im Skript verwenden === | ||
| Zeile 38: | Zeile 38: | ||
;Beispiel | ;Beispiel | ||
* In der Datei | #!/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 === | === Debugging von Skripten === | ||
| Zeile 50: | Zeile 51: | ||
;Syntaxprüfung ohne Ausführung | ;Syntaxprüfung ohne Ausführung | ||
* | * bash -n skript.sh | ||
→ prüft nur die Syntax, führt das Skript aber nicht aus. | → prüft nur die Syntax, führt das Skript aber nicht aus. | ||
;Debugmodus mit Kommandoanzeige | ;Debugmodus mit Kommandoanzeige | ||
* | * bash -x skript.sh | ||
→ zeigt jedes ausgeführte Kommando vor der Ausführung an. | → zeigt jedes ausgeführte Kommando vor der Ausführung an. | ||
;Innerhalb eines Skripts aktivieren | ;Innerhalb eines Skripts aktivieren | ||
#!/bin/bash | |||
set -x # Debugmodus aktivieren | |||
echo "Starte" | |||
ls /nichtda | |||
set +x # Debugmodus deaktivieren | |||
=== Typische Vorgehensweise bei Fehlersuche === | === Typische Vorgehensweise bei Fehlersuche === | ||
* Syntax mit | * Syntax mit bash -n prüfen. | ||
* Skript im Debugmodus ( | * Skript im Debugmodus (bash -x) ausführen. | ||
* Fehlerkanäle gezielt in Logdateien umleiten. | * Fehlerkanäle gezielt in Logdateien umleiten. | ||
* Rückgabewert mit | * Rückgabewert mit echo $? auswerten. | ||
* Schrittweise Befehle isolieren und testen. | * Schrittweise Befehle isolieren und testen. | ||
Version vom 17. Oktober 2025, 16:09 Uhr
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.