Ausführen des Skripts im Debugmodus Sie können das gesamte Skript im Debugmodus ausführen, indem Sie bash -x <script> verwenden. Bash druckt jede Befehlszeile aus, bevor sie ausgeführt wird, und jeder Zeile wird ein +-Zeichen vorangestellt, um die Anzahl der verschachtelten Ebenen des Befehls anzugeben. > bash -x debug.sh + echo 'Erste Zeile' Erste Zeile # Die Ausgabe hat kein Pluszeichen ++ Datum # Der Befehl wird zuerst ausgeführt, um die beiden Pluszeichen zu ersetzen, da der Befehl in echo + echo ‚Print datetime: Thu 26 Mar 2020 08:21:28 PM CST Done‘ verschachtelt ist. Druckdatum und -zeit: Do., 26. März 2020, 20:21:28 Uhr CST. Erledigt. Bei komplexen Skripten können wir die Umgebungsvariable PS4 mit den eingebauten Variablen zum Debuggen nutzen, um detailliertere Informationen auszugeben: > export PS4='+${BASH_SOURCE}:${LINENO}:${FUNCNAME[0]}: ' > bash -x debug.sh +debug.sh:3:: echo 'Erste Zeile' Erste Zeile ++debug.sh:4:: Datum +debug.sh:4:: echo „Datum und Uhrzeit drucken: Do, 26. März 2020, 20:35:59 Uhr CST. Erledigt.“ Druckdatum und -zeit: Do., 26. März 2020, 20:35:59 Uhr CST. Erledigt. Wir können auch das Schlüsselwort DEBUG von trap verwenden, um einen angegebenen Befehl oder eine angegebene Funktion auszuführen, bevor jede Zeile des Skripts interpretiert wird: Falle 'echo "VARIABLE-TRACE> \$variable = \"$variable\""' DEBUG Variable = 29 let-Variable++ lass Variable*=5 Ausfahrt 0 # Ausgabe wie folgt VARIABLE-TRACE> $variable = "" VARIABLE-TRACE> $variable = "29" VARIABLE-TRACE> $variable = "30" VARIABLE-TRACE> $variable = "150" Sie können das Schlüsselwort „trap ERR“ auch verwenden, um voreingestellte Aktionen auszuführen, wenn während der Interpretation ein Fehler auftritt, z. B. das Drucken des Fehlerbefehls: Falle 'echo $BASH_COMMAND' ERR Angesichts der geringen Effizienz des Debuggens mit Trap wird jedoch empfohlen, die Debugging-Option direkt in komplexeren Skripten zu verwenden oder Debugging-Tools wie bashdb zu nutzen. Erweitertes Debuggen Anzeigen von Funktionsaufrufinformationen Die Verwendung des integrierten Befehlsaufrufers in einer Funktion kann die Aufrufinformationen der Funktion an stdout ausgeben. Beachten Sie jedoch, dass der Befehl innerhalb der Funktion aufgerufen werden muss. #!/usr/bin/bash Funktion1 () { für i in `seq 0 3` Tun echo -e "Level$i\t `Anrufer $i`" Erledigt } Funktion2 () { Funktion1 } Funktion3 () { Funktion2 } Funktion3 caller 0 # muss in einer Funktion aufgerufen werden, sonst erfolgt keine Ausgabe exit 0 Das Ausführen des Skripts führt zu folgender Ausgabe:
Lokales Debuggen Sie können einen lokalen Debugblock mit dem Set-Befehl erstellen. Sie können lokales Debugging wie folgt hinzufügen: setze -x Datum setze +x > bash script1.sh # Es müssen keine Debug-Parameter hinzugefügt werden. Das Skript startet jetzt. + Datum Freitag, 28. Februar 2020, 18:23:04 Uhr CST +Satz +x Dies ist eine Zeichenfolge: schwarz Und das ist eine Zahl: 9 Debug-Parametertabelle
Parameter, die zum Debuggen verwendet werden, können während des Betriebs dynamisch hinzugefügt oder gelöscht werden: > setze -v > Datum Datum Freitag, 28. Februar 2020, 18:54:47 Uhr CST > set -x # Parameter können akkumuliert werden. Die Wirkung von date # -v + die Wirkung von date # -xFri 28 Feb 2020 06:55:37 PM CST > set +vx # Parameter set +vx abbrechen Sie können die Anzahl der Escape-Zeichen in Ihrem Skript erheblich reduzieren, indem Sie die Option -f verwenden: > ls? x86_64-pc-linux-gnu-bibliothek > set -f # Metazeichen-Übereinstimmung deaktivieren > ls? ls: kann nicht auf '?' zugreifen: Keine solche Datei oder kein solches Verzeichnis > berühren? > ls? '?' > rm? > set +f -x # Option x kann auch verwendet werden, um detaillierte Fehlerinformationen anzuzeigen > aaa +aaa + '[' -x /usr/lib/Befehl nicht gefunden ']' + /usr/lib/Befehl nicht gefunden --aaa Befehl 'aaa' nicht gefunden. Meinten Sie: Befehl „aha“ von deb aha (0,5-1) Befehl „jaaa“ von deb jaaa (0.8.4-4) Befehl „aa“ aus Deb Astronomical-Almanac (5.6-6) Versuchen Sie: sudo apt install <deb name> + zurück 127 Standardmäßiges Debuggen Sie können Parameter auch direkt zur ersten Zeile des Skripts hinzufügen, um das Skript standardmäßig im Debugmodus zu starten: #!/bin/bash -xv Sie können echo auch verwenden, um vor dem möglicherweise fehlgeschlagenen Befehl Debuginformationen auszugeben: echo "Debug-Meldung: Jetzt wird versucht, den Befehl w zu starten"; w # Verwenden Sie ;, um die auszuführenden Befehle zu sortieren echo "Die Variable VARNAME ist jetzt auf $VARNAME eingestellt." Festlegen von Optionen zur Unterstützung des Debuggens Um das Debuggen zu erleichtern, können wir den Befehl „set“ verwenden, um die Bash-Optionen festzulegen: > set -o # Den Switch-Status aller Optionen anzeigen > set -o | grep xtrace xtrace aus > set -x # entspricht set -o xtrace > set -o | grep xtrace + grep --color=auto xtrace + setze -o xtrace auf > set +x # entspricht set +o xtrace +Satz +x > set -o | grep xtrace xtrace aus Allgemeine Debugoptionen Beim Verweisen auf eine definierte Variable tritt ein Fehler auf: > $VAR aufheben; $VAR echo > set -u # entspricht set -o nounset > echo $var bash: var: ungebundene Variable Um ein versehentliches Überschreiben von Daten in Dateien zu verhindern, stellen Sie die Weiterleitung auf eine vorhandene Datei so ein, dass sie verboten ist: > set -C # entspricht set -o noclobber > Berührungstest > Datum > Test bash: Test: Vorhandene Datei kann nicht überschrieben werden So einstellen, dass Platzhalter nicht aufgelöst werden: > set -f # entspricht set -o noglob > berühren * > ll * -rw-rw-r-- 1 remilia remilia 0 1. März 20:09 '*' Dies ist das Ende dieses Artikels mit der detaillierten Erklärung des Skript-Debugging-Mechanismus in Bash. Weitere relevante Inhalte zum Debuggen von Bash-Skripts finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Die Verwendung und Methoden von async und await in JavaScript
>>: MySQL 8.0.18 fügt Benutzer zur Datenbank hinzu und erteilt Berechtigungen
SVN ist die Abkürzung für Subversion, ein Open-So...
Vorwort: Nach dem Studium des vorherigen Artikels...
1. Über die Registrierung Der offizielle Docker-H...
Bisher wurden die von uns verwendeten Images alle...
Inhaltsverzeichnis 1. Über JavaScript 2. JavaScri...
1. Zeitarten werden unterteilt in: 1. Netzwerkzei...
Netzwerk-Ports freigeben Tatsächlich gibt es in D...
Installationsumgebung: CentOS7 64-Bit-Mini-Versio...
Mit der CSS3-Eigenschaft „border-image“ können Si...
Vorwort: js ist eine Single-Thread-Sprache, daher...
Inhaltsverzeichnis Vom Vater zum Sohn Vom Sohn zu...
Suchen Sie online nach doppelten Daten und behalt...
Da immer mehr Projekte bereitgestellt werden, wer...
In diesem Artikel wird der spezifische Code für J...
Verwaltung der Ein- und Ausgaben im System 1. Ver...