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 helpsier 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 helpsetter posisjonsparametrene til ordethelpog ' gir ikke ut noe.help setgir en linje eller så for hvert alternativ, inkludert den du viser for-xi min (eldre) versjon, og ved t slutten av listen sierUsing + rather than - causes these flags to be turned off.