set -x
Zeigen Sie einfach ein Endergebnis des Befehls. Jede Möglichkeit, jeden Schritt klarer zu sehen, wie die Bilder unten.
bash -x script_name.sh arg1 arg2
?
set -x
Zeigen Sie einfach ein Endergebnis des Befehls. Jede Möglichkeit, jeden Schritt klarer zu sehen, wie die Bilder unten.
bash -x script_name.sh arg1 arg2
?
Antworten:
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 DEBUG
definiert 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 $BASHPID
durchgeführt wird, aber bei weitem nicht alle Schritte aufgelistet sind.
Diese Art der Debugging-Ausgabe von bash
ist 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.
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
)
bash
in einem Debugger?