Kolega niedawno przedstawił mi bash -x do debugowania moich skryptów bash bez konieczności podejmowania trasa echo $foo.
$ bash -x hello-world.sh + echo "Hello World" Hello World
Wewnętrznie – jak bash to osiąga? Zaznaczam man bash i (chyba nie?) Wspomniałem o fladze -x przy wywoływaniu interpretera. Szukam głównie przegląd tego, co będzie, a czego nie będzie debugowane w środowisku -x, ani w innych problemach.
Odpowiedź
-x jest tym samym, co ustawienie xtrace z -o do basha. Z mojej kopii strony podręcznika basha:
Po rozwinięciu każdego prostego polecenia , dla polecenia , case , wybierz polecenie lub arytmetyczne dla polecenie, wyświetl rozwiniętą wartość PS4 , a następnie polecenie i jego rozwinięty argument ts lub powiązana lista słów.
Nie sądzę, aby było wiele „gotch”: wypisuje każde polecenie, które wykonuje. Przypuszczam, że jeśli „ponownie analizujesz dane wyjściowe stderr ze skryptu powłoki, może to zepsuć sytuację, ponieważ polecenia są drukowane do stderr (aka deskryptor pliku 2), ale wydaje się to skrajnym przypadkiem.
(Możesz również warunkowo włączyć to w skryptach lub w interaktywnych sesjach powłoki za pomocą set -x, aby włącz go i set +x, aby go ponownie wyłączyć.)
set helppo prostu mówi-x Print commands and their arguments as they are executed.. Nie mogę ' nie znaleźć niczego na temat unset to w bieżącej powłoce.set helpustawia parametry pozycyjne na słowohelpi nie ' nie wyświetla niczego.help setpodaje jedną lub więcej linii dla każdej opcji, w tym tej wyświetlanej dla-xw mojej (starszej) wersji i wt Na końcu tej listy jest napisaneUsing + rather than - causes these flags to be turned off.