set -x
Zeigen Sie einfach ein Endergebnis des Befehls. Jede Möglichkeit, jeden Schritt klarer zu sehen, wie die Bilder unten.
7
set -x
Zeigen Sie einfach ein Endergebnis des Befehls. Jede Möglichkeit, jeden Schritt klarer zu sehen, wie die Bilder unten.
bash
in einem Debugger?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 kompilierenDEBUG
definiert Makro und wenn Sie alle auf Kommentar Anrufe an dieitrace()
Freigabefunktion in den Source - Code der Shell 1 , dann können Sie ein wenig von dem, was Sie sehen wollen , sind: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.quelle
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
)quelle