Co to jest `bash -x`

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ć.)

Komentarze

  • Ups. Dziękuję . 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.
  • @sherrellbc: set help ustawia parametry pozycyjne na słowo help 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 napisane Using + rather than - causes these flags to be turned off.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *