Wenn ich eintrete Option bash -x eingebe, wird die gesamte Zeile angezeigt . Das Skript wird jedoch normal ausgeführt.
Wie kann ich Zeile für Zeile ausführen? Dann kann ich sehen, ob es das Richtige tut, oder ich brich den Fehler ab und behebe ihn. Der gleiche Effekt wird read
in jede Zeile eingefügt.
Antworten:
Sie müssen nicht in jede Zeile einen Lesevorgang einfügen, sondern fügen einfach eine Falle wie die folgende in Ihr Bash-Skript ein. Sie hat den gewünschten Effekt, z.
Funktioniert, habe es gerade mit bash v4.2.8 und v3.2.25 getestet.
VERBESSERTE VERSION
Wenn Ihr Skript Inhalte aus Dateien liest, funktioniert die oben aufgeführte nicht. Eine Problemumgehung könnte wie folgt aussehen.
Um das Skript zu stoppen, müssten Sie es in diesem Fall von einer anderen Shell aus beenden .
ALTERNATIVE1
Wenn Sie nur einige Sekunden warten möchten, bevor Sie mit dem nächsten Befehl in Ihrem Skript fortfahren, kann das folgende Beispiel für Sie funktionieren.
Ich füge set + x und set -x zum Trap-Befehl hinzu, um die Ausgabe besser lesbar zu machen.
quelle
trap 'read -u1' debug
, um das Problem der Dateiumleitung zu überschreiben.Vielleicht ist der BASH Debugger etwas für Sie.
quelle
apt-get install bashdb
. Dann müssen Sie nur noch ausführenbashdb your_command.sh
, tippenstep
und danach den Wagenrücklauf drücken.brew install bashdb
Wenn es sich bei Ihrem Bash-Skript wirklich um eine Reihe von Einzelbefehlen handelt, die Sie einzeln ausführen möchten, können Sie Folgendes tun: Jeder Befehl wird einzeln ausgeführt, wenn Sie eine Variable inkrementieren
LN
, die der Zeilennummer entspricht, die Sie ausführen möchten . Auf diese Weise können Sie den letzten Befehl ganz einfach erneut ausführen und dann die Variable inkrementieren, um zum nächsten Befehl zu gelangen.Angenommen, Ihre Befehle befinden sich in einer Datei "it.sh", führen Sie die folgenden Schritte nacheinander aus.
quelle
Werfen Sie einen Blick auf Bash-Stepping-Xtrace .
Es ermöglicht das Treten von xtrace.
quelle
xargs: kann Zeilen filtern
quelle