Een collega heeft me onlangs voorgesteld aan bash -x
voor het debuggen van mijn bash-scripts zonder de echo $foo
route.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Intern – hoe bereikt bash dit? Ik heb man bash
gecontroleerd en (leek het niet?) De vlag -x
te vermelden bij het aanroepen van de tolk. Ik ben voornamelijk op zoek naar een overzicht van wat wel en niet zal worden gedebugd in de -x
omgeving, of andere valstrikken.
Antwoord
-x
is hetzelfde als het instellen van xtrace
met de -o
optie om te bash. Uit mijn exemplaar van de bash-manpagina:
Na het uitbreiden van elk eenvoudig commando , voor commando, case commando, selecteer opdracht, of rekenkundige voor commando, toon de uitgebreide waarde van PS4 , gevolgd door het commando en zijn uitgebreide argumen ts of bijbehorende woordenlijst.
Ik denk niet dat er veel “valstrikken” mee zijn: het drukt elk commando af dat het uitvoert. Ik veronderstel dat als je “de stderr
uitvoer van het shell-script opnieuw parseert, dit dat kan verknoeien, omdat de commandos worden afgedrukt naar stderr
(ook bekend als bestandsdescriptor 2), maar dat lijkt een extreem geval.
(Je kunt dit ook voorwaardelijk inschakelen in scripts of in interactieve shell-sessies met set -x
om schakel het in en set +x
om het weer uit te schakelen.)
set help
zegt gewoon-x Print commands and their arguments as they are executed.
. Ik kon ' niets vinden over hoe unset dat in de huidige shell.set help
stelt de positionele parameters in op het woordhelp
en geeft niets ' weer.help set
geeft een regel of zo voor elke optie, inclusief degene die je toont voor-x
in mijn (oudere) versie, en op t het einde van die lijst zegtUsing + rather than - causes these flags to be turned off.