|
|
Zeile 78: |
Zeile 78: |
| </noinclude> | | </noinclude> |
| = TMP = | | = TMP = |
| == Debugging für das gesamte Skript ==
| |
| Wenn die Dinge nicht nach Plan laufen, müssen Sie herausfinden, was genau die Ursache für das Scheitern des Skripts ist
| |
| * Die Bash bietet umfangreiche Debugging-Funktionen
| |
| * Die gebräuchlichste ist, die Subshell mit der Option <code>-x</code> zu starten, wodurch das gesamte Skript im Debug-Modus ausgeführt wird
| |
| * Die Spuren der einzelnen Befehle und ihrer Argumente werden auf der Standardausgabe ausgegeben, nachdem die Befehle expandiert wurden, aber bevor sie ausgeführt werden
| |
|
| |
| Dies ist das <code>kommentierte-script1.sh</code> Skript, das im Debug-Modus ausgeführt wird
| |
| * Beachten Sie auch hier, dass die hinzugefügten Kommentare in der Ausgabe des Skripts nicht sichtbar sind
| |
| {| class="wikitable"
| |
| |
| |
| |}
| |
| Es gibt jetzt einen vollwertigen Debugger für die Bash, der bei SourceForge verfügbar ist
| |
| * Diese Debugging-Funktionen sind in den meisten modernen Versionen der Bash ab 3.x verfügbar
| |
|
| |
| == Debugging für Teile des Skripts ==
| |
| Mit dem '''set''' der Bash können Sie die Teile des Skripts, von denen Sie sicher sind, dass sie fehlerfrei sind, im normalen Modus ausführen und nur für problematische Bereiche Debugging-Informationen anzeigen
| |
| * Angenommen, wir sind uns nicht sicher, was der '''w'''-Befehl im Beispiel <code>kommentiertes-skript1.sh</code> bewirken wird, dann könnten wir ihn wie folgt in das Skript einschließen:
| |
| {| class="wikitable"
| |
| |
| |
| |}
| |
| Die Ausgabe sieht dann wie folgt aus:
| |
| {| class="wikitable"
| |
| |
| |
| |}
| |
| Sie können den Debugging-Modus innerhalb desselben Skripts beliebig oft ein- und ausschalten
| |
|
| |
| Die folgende Tabelle gibt einen Überblick über weitere nützliche Bash-Optionen:
| |
|
| |
| '''Tabelle 2-1. Übersicht der eingestellten Debugging-Optionen'''
| |
| {| class="wikitable"
| |
| !Kurze Schreibweise
| |
| !Lange Schreibweise
| |
| !Ergebnis
| |
| |-
| |
| |set -f
| |
| |set -o noglob
| |
| |Deaktiviert die Generierung von Dateinamen mit Metazeichen (Globbing)
| |
| |-
| |
| |set -v
| |
| |set -o verbose
| |
| |Druckt Shell-Eingabezeilen aus, wenn sie gelesen werden
| |
| |-
| |
| |set -x
| |
| |set -o xtrace
| |
| |Druckt Befehlsspuren vor der Ausführung des Befehls
| |
| |}
| |
| Der Bindestrich wird verwendet, um eine Shell-Option zu aktivieren und ein Plus, um sie zu deaktivieren
| |
| * Lassen Sie sich davon nicht verwirren!
| |
|
| |
| Im folgenden Beispiel werden diese Optionen in der Befehlszeile demonstriert:
| |
| {| class="wikitable"
| |
| |
| |
| |}
| |
| Alternativ können diese Modi auch im Skript selbst angegeben werden, indem die gewünschten Optionen in der ersten Zeile der Shell-Deklaration hinzugefügt werden
| |
| * Optionen können kombiniert werden, wie es bei UNIX-Befehlen üblich ist:
| |
|
| |
| '''#!/bin/bash <code>-xv</code>'''
| |
|
| |
| Wenn Sie den fehlerhaften Teil Ihres Skripts gefunden haben, können Sie '''echo'''-Anweisungen vor jedem Befehl einfügen, bei dem Sie unsicher sind, so dass Sie genau sehen, wo und warum etwas nicht funktioniert
| |
| * Im Beispielskript <code>commented-script1.sh</code> könnte man das so machen, wobei man immer noch davon ausgeht, dass die Anzeige der Benutzer Probleme macht:
| |
| {| class="wikitable"
| |
| |
| |
| |}
| |
| In fortgeschritteneren Skripten kann das '''echo''' eingefügt werden, um den Inhalt von Variablen in verschiedenen Phasen des Skripts anzuzeigen, so dass Fehler aufgedeckt werden können:
| |
| {| class="wikitable"
| |
| |
| |
| |}
| |
| [[Kategorie:Bash/Scripting]] | | [[Kategorie:Bash/Scripting]] |
Bash/Debug - Beschreibung
Beschreibung
Installation
Aufruf
Optionen
Unix |
GNU |
Parameter |
Beschreibung
|
|
|
|
|
Parameter
Umgebungsvariablen
Exit-Status
Wert |
Beschreibung
|
0 |
Erfolg
|
>0 |
Fehler
|
Anwendung
Problembehebung
Konfiguration
Dateien
Anhang
Siehe auch
Dokumentation
- Man-Page
- prep(1)
Links
Projekt
Weblinks
TMP