En kollega introduserte meg nylig for bash -x
for å feilsøke bash-skriptene mine uten å ta echo $foo
ruten.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Internt – hvordan oppnår bash dette? Jeg sjekket man bash
og det (virket ikke som?) Nevnte -x
-flagget da jeg påkalte tolk. Jeg leter hovedsakelig etter en oversikt over hva som ikke vil bli feilsøkt i -x
miljøet eller andre gotchas.
Svar
-x
er det samme som å sette xtrace
med -o
alternativ å bash. Fra kopien av bash-manpage:
Etter å ha utvidet hver enkle kommando , for kommando, sak kommando, velg kommando, eller aritmetisk for kommando, vis den utvidede verdien til PS4 , etterfulgt av kommandoen og dens utvidede argumen ts eller tilhørende ordliste.
Jeg tror ikke det er mange «gotchas» med dette: den skriver ut hver kommando den utfører. Jeg antar at hvis du parser stderr
-utgangen fra skallskriptet, kan dette ødelegge det, fordi kommandoene skrives ut til stderr
(aka filbeskrivelse 2), men det virker som et ekstremt tilfelle.
(Du kan også betinget aktivere dette i skript eller i interaktive shell-økter med set -x
til slå den på og set +x
for å slå den av igjen.)
set help
sier bare-x Print commands and their arguments as they are executed.
. Jeg kunne ikke ' t å finne noe om hvordan jeg unset at in the current shell.set help
setter posisjonsparametrene til ordethelp
og ' gir ikke ut noe.help set
gir en linje eller så for hvert alternativ, inkludert den du viser for-x
i min (eldre) versjon, og ved t slutten av listen sierUsing + rather than - causes these flags to be turned off.