En kollega introducerede mig for nylig til bash -x
til debugging af mine bash-scripts uden at tage ruten echo $foo
.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Internt – hvordan opnår bash dette? Jeg tjekket man bash
og det (syntes ikke at være?) Nævner -x
-flagget, når jeg påkalder tolken. Jeg leder primært efter en oversigt over, hvad der vil og ikke vil blive debugeret i -x
miljøet eller andre gotchas.
Svar
-x
er det samme som at indstille xtrace
med -o
mulighed for at bash. Fra min kopi af bash manpage:
Efter udvidelse af hver enkel kommando , til kommando, sag kommando, vælg kommando eller aritmetik til kommando, vis den udvidede værdi af PS4 efterfulgt af kommandoen og dens udvidede argumen ts eller tilknyttet ordliste.
Jeg tror ikke, der er mange “gotchas” med dette: den udskriver hver kommando, den udfører. Jeg formoder, at hvis du “parser stderr
output fra shell-scriptet, kan dette ødelægge det, fordi kommandoerne udskrives til stderr
(aka filbeskrivelse 2), men det virker som et ekstremt tilfælde.
(Du kan også betinget aktivere dette i scripts eller i interaktive shell-sessioner med set -x
til slå den til og set +x
for at slå den fra igen.)
set help
siger bare-x Print commands and their arguments as they are executed.
. Jeg kunne ikke ' ikke finde noget om, hvordan jeg frakoblet det i den aktuelle shell.set help
indstiller positionsparametrene til ordethelp
og ' t output noget.help set
giver en linje eller deromkring for hver mulighed, inklusive den, du viser til-x
i min (ældre) version og ved t slutningen af denne liste sigerUsing + rather than - causes these flags to be turned off.