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…“) |
|||
| 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, 14: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.