Inspiriert von dieser Frage mit dem Titel: Wann werden die eingebauten Befehle in den Speicher geladen ? Als ich versuchte, diese zu beantworten, habe ich den folgenden Befehl ausprobiert und war etwas überrascht, dass ich ihn nicht ausführen konnte:
$ strace cd $HOME
Gibt es eine Methode, mit der ich strace für die in Bash integrierten Befehle ausführen kann?
strace
ein Programm, das nicht ausgeführt wird, nicht zu einer Ablaufverfolgung führt?Antworten:
Wenn Sie darüber nachdenken, wie es
strace
funktioniert, ist es absolut sinnvoll, dass keines der in Bash eingebauten Elemente nachvollziehbar ist.strace
kann nur aktuelle ausführbare Dateien verfolgen, die eingebauten jedoch nicht.Zum Beispiel mein
cd
Befehl:Trick um die CD zu stracen?
Ich bin auf diese Technik gestoßen,
strace
bei der Sie den tatsächlichenbash
Prozess aufrufen und aufcd
diese Weise indirekt verfolgen können.Beispiel
Was dazu führt, dass ich den
bash
Prozess wie folgt straffen kann:Dies ist die Bash-Eingabeaufforderung, in der sie auf Eingaben wartet. Also lass es uns den Befehl geben
cd ..
:An der obigen Ausgabe können Sie sehen, wo ich den Befehl eingegeben habe
cd ..
und die Eingabetaste (\n
) drücken . Von dort aus können Sie sehen, dass diestat()
Funktion aufgerufen wurde und dass Bash danach an einer anderenread(0..
Eingabeaufforderung sitzt und auf einen anderen Befehl wartet.quelle
Um
strace
die Shell zu tuncd /some/dir
:quelle
$1
hier dennbash
nicht sein%
oder%1
?Sie können Folgendes versuchen:
Beispielsweise:
quelle