Was ist `bash -x`

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 Wort help 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 steht Using + rather than - causes these flags to be turned off.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.