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 help
po 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 help
ustawia parametry pozycyjne na słowohelp
i nie ' nie wyświetla niczego.help set
podaje jedną lub więcej linii dla każdej opcji, w tym tej wyświetlanej dla-x
w mojej (starszej) wersji i wt Na końcu tej listy jest napisaneUsing + rather than - causes these flags to be turned off.