Ein Kollege hat mich kürzlich mit bash -x
bekannt gemacht, um meine Bash-Skripte zu debuggen, ohne sie zu nehmen die echo $foo
Route.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Intern – wie erreicht bash dies? Ich habe man bash
aktiviert und es (schien es nicht zu sein?) Erwähnte das -x
-Flag beim Aufrufen des Interpreters. Ich suche hauptsächlich eine Übersicht darüber, was in der Umgebung von -x
oder anderen Fallstricken oder anderen Fallstricken debuggt wird und was nicht.
Antwort
-x
entspricht der Einstellung von xtrace
mit -o
Option zum Bash. Aus meiner Kopie der Bash-Manpage:
Nach dem Erweitern jedes einfachen Befehls wird für den Befehl , case Befehl, Wählen Sie den Befehl oder die arithmetische für Befehl, zeigen Sie den erweiterten Wert von PS4 an, gefolgt vom Befehl und seinem erweiterten Argument ts oder zugehörige Wortliste.
Ich glaube nicht, dass es viele „Fallstricke“ gibt: Es gibt jeden Befehl aus, den es ausführt. Ich nehme an, wenn Sie die stderr
-Ausgabe des Shell-Skripts erneut analysieren, kann dies das durcheinander bringen, da die Befehle auf stderr
gedruckt werden (auch bekannt als Dateideskriptor 2), aber das scheint ein Extremfall zu sein.
(Sie können dies auch bedingt in Skripten oder in interaktiven Shell-Sitzungen mit set -x
to aktivieren Schalten Sie es ein und set +x
, um es wieder auszuschalten.)
Kommentare
- Oof. Vielen Dank
set help
sagt nur-x Print commands and their arguments as they are executed.
. Ich konnte ' nichts darüber finden, wie man Deaktivieren Sie das in der aktuellen Shell. - @sherrellbc:
set help
setzt die Positionsparameter auf das Worthelp
und ' gibt nichts aus.help set
gibt für jede Option etwa eine Zeile an, einschließlich der für-x
in meiner (älteren) Version und bei t Am Ende dieser Liste stehtUsing + rather than - causes these flags to be turned off.