Wat is `bash -x`

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.)

Reacties

  • Oof. Bedankt . 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.
  • @sherrellbc: set help stelt de positionele parameters in op het woord help 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 zegt Using + rather than - causes these flags to be turned off.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *