Un coleg mi-a prezentat recent bash -x
pentru depanarea scripturilor mele bash fără a lua ruta echo $foo
.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Pe plan intern – cum realizează acest lucru bash-ul? Am bifat man bash
și (nu s-a părut?) Menționează steagul -x
la apelarea interpretului. În principal caut o prezentare generală a ceea ce va și ce nu va fi depanat în -x
mediul înconjurător sau în orice alte probleme.
Răspuns
-x
este la fel ca setarea xtrace
cu -o
opțiune pentru bash. Din copia mea a paginii de manual bash:
După extinderea fiecărei comenzi simple , pentru comanda , caz selectați comanda sau aritmetică pentru comandă, afișați valoarea extinsă a PS4 , urmată de comandă și argumenul său extins ts sau lista de cuvinte asociate.
Nu cred că există multe „gotchas” cu aceasta: imprimă fiecare comandă pe care o execută. Presupun că dacă „analizați stderr
ieșirea din scriptul shell, acest lucru poate deranja acest lucru, deoarece comenzile sunt tipărite în stderr
(alias descriptorul de fișiere 2), dar acesta pare a fi un caz extrem.
(Puteți, de asemenea, să activați condiționat acest lucru în scripturi sau în sesiuni de shell interactive cu set -x
la porniți-l și set +x
pentru al opri din nou.)
set help
spune doar-x Print commands and their arguments as they are executed.
. Nu am putut ' să nu găsesc nimic despre cum să anulați că în shell-ul curent.set help
setează parametrii poziționali la cuvântulhelp
și ' nu produce nimic.help set
oferă o linie sau cam așa pentru fiecare opțiune, inclusiv cea pe care o afișați pentru-x
în versiunea mea (mai veche) și la t sfârșitul acestei liste spuneUsing + rather than - causes these flags to be turned off.