En kollega introducerade mig nyligen till bash -x
för att felsöka mina bash-skript utan att ta rutten echo $foo
.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Internt – hur gör bash detta? Jag kollade på man bash
och det (verkade inte tycka?) Nämnde -x
-flaggan när jag åberopade tolken. Jag letar främst efter en översikt över vad som inte kommer att felsökas i -x
-miljön eller andra gotchas.
Svar
-x
är samma sak som att ställa in xtrace
med -o
option to bash. Från min kopia av bash-manpage:
Efter att ha utvidgat varje enkelt kommando , för kommando, fall kommando, välj kommando eller aritmetik för -kommando, visa det utökade värdet för PS4 , följt av kommandot och dess utökade argumen ts eller tillhörande ordlista.
Jag tror inte att det finns många ”gotchas” med detta: det skriver ut varje kommando det körs. Jag antar att om du ”tolkar stderr
från shell-skriptet, kan detta förstöra det, eftersom kommandona skrivs ut till stderr
(aka filbeskrivare 2), men det verkar som ett extremt fall.
(Du kan också villkorligt aktivera detta i skript eller i interaktiva skalsessioner med set -x
till slå på den och set +x
för att stänga av den igen.)
set help
säger bara-x Print commands and their arguments as they are executed.
. Jag kunde inte ' inte hitta något om hur jag avmarkera det i det aktuella skalet.set help
ställer in positionsparametrarna till ordethelp
och ' t matar ut något.help set
ger en rad eller så för varje alternativ, inklusive den du visar för-x
i min (äldre) version och vid t slutet på listan sägerUsing + rather than - causes these flags to be turned off.