Gibt es eine Möglichkeit, jeden Schritt während der Befehlsverarbeitung anzuzeigen?

7

set -xZeigen Sie einfach ein Endergebnis des Befehls. Jede Möglichkeit, jeden Schritt klarer zu sehen, wie die Bilder unten.

Geben Sie hier die Bildbeschreibung ein

Karl
quelle
Führen Sie bashin einem Debugger?
Satō Katsura
Ich bin nicht sicher, ob dies Ihren Wünschen entspricht: google.se/search?q=bashdb+debugger
Hannu
Wie führt man das Skript aus? Hast du versucht, es so laufen zu lassen? bash -x script_name.sh arg1 arg2?
Rabin

Antworten:

2

Es hört sich so an, als hätten Sie gerne einen Shell-Syntax-Scanner und -Parser, der die gefundenen Token und die Aktionen ausgibt, die auf dem Weg zur Ausführung des eigentlichen Befehls ausgeführt werden.

Mir ist keine Shell bekannt, die dies tut, da dies die Verarbeitung immens verlangsamen und für jeden selbst etwas komplexen Befehl eine enorme Menge an Ausgabe erzeugen würde.

Mit bash, wenn Sie die sich mit der Shell kompilieren DEBUGdefiniert Makro und wenn Sie alle auf Kommentar Anrufe an die itrace()Freigabefunktion in den Source - Code der Shell 1 , dann können Sie ein wenig von dem, was Sie sehen wollen , sind:

bash-4.4$ if [[ "$BASHPID" = 10 ]] && [[ "$USER" = myself ]]; then echo hello me; fi
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $BASHPID"
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $USER"
TRACE: pid 22914: param_expand: `$BASHPID' pflags = 0

Hier sehen Sie, wie der Parser einige Debugging-Anweisungen zum Suchen von öffnenden und schließenden doppelten Anführungszeichen und Shell-Variablen ausgibt. Später informiert uns ein weiterer Verarbeitungsschritt darüber, dass eine Parametererweiterung von $BASHPIDdurchgeführt wird, aber bei weitem nicht alle Schritte aufgelistet sind.

Diese Art der Debugging-Ausgabe von bashist jedoch nützlicher für Personen, die tatsächlich mit dem Schreiben und Ändern des Quellcodes der Shell befasst sind, und soll definitiv nicht dazu dienen, das Parsen und Interpretieren der Eingabe durch die Shells zu verstehen.

Um sich mit der Funktionsweise der Syntax und Grammatik der Shell vertraut zu machen, würde ich empfehlen, mit der POSIX-Definition der Grammatik der Shell zu beginnen (die recht komplex und für jeden, der EBNF nicht lesen kann, mehr oder weniger bedeutungslos ist ).


1 Mit Ausnahme von einem lib/glob/glob.c, der einen Syntaxfehler enthält.

Kusalananda
quelle
-2

set -x ist für Bash-Shell-Skripte, es funktioniert nicht für Binärdateien.

Wenn Sie eine binäre Ausführung verfolgen möchten, sollten Sie einen Debugger (zB betrachten gdb)

Rabin
quelle
1
Die Frage bezieht sich speziell auf Bash, nicht auf beliebige ausführbare Dateien.
Jayhendren