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 helpsä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 helpställer in positionsparametrarna till ordethelpoch ' t matar ut något.help setger en rad eller så för varje alternativ, inklusive den du visar för-xi min (äldre) version och vid t slutet på listan sägerUsing + rather than - causes these flags to be turned off.