Uruchom skrypt bash bash -x ./script.sh
lub dodaj go, set -x
aby wyświetlić wyniki debugowania.
Dodatkowo w wersji bash
4.1 lub nowszej:
Jeśli chcesz zapisać dane wyjściowe debugowania w osobnym pliku, dodaj to do skryptu:
exec 5> debug_output.txt
BASH_XTRACEFD="5"
Zobacz: https://stackoverflow.com/a/25593226/3776858
Jeśli chcesz zobaczyć numery linii, dodaj to:
PS4='$LINENO: '
Jeśli masz dostęp do
logger
komendy, możesz użyć tego do zapisania wyniku debugowania za pośrednictwem syslog ze znacznikiem czasu, nazwą skryptu i numerem wiersza:
#!/bin/bash
exec 5> >(logger -t $0)
BASH_XTRACEFD="5"
PS4='$LINENO: '
set -x
# Place your code here
Można użyć opcji -p
z logger
poleceniem, aby ustawić indywidualne usługi i poziom pisać wyjście za pośrednictwem lokalnych syslog do własnego pliku dziennika.
BASH_XTRACEFD="5"
bash, zapisuje dane wyjściowe śledzenia wygenerowane, gdyset -x
jest włączony do deskryptora pliku 5.exec 5> >(logger -t $0)
przekierowuje dane wyjściowe z deskryptora pliku 5 dologger
polecenia.Za pomocą
set -x
Zawsze używam
set -x
iset +x
. Możesz zawinąć obszary, które chcesz zobaczyć, co się z nimi dzieje, aby zwiększyć / zmniejszyć szczegółowość.log4bash
Również jeśli wykonałeś prace programistyczne i znasz styl programów rejestrujących o nazwach log4j, log4perl itp., Możesz skorzystać z log4bash .
fragmentStamtąd możesz robić takie rzeczy w skryptach Bash:
Wynikające z tego rodzaju wyników:
log4sh
Jeśli potrzebujesz czegoś bardziej przenośnego, są też starsze
log4sh
. Działa podobnielog4bash
, dostępny tutaj:źródło
alias say="spd-say"
plik .bashrc, który imitujesay
polecenie z innych dystrybucji lub systemu OS X.Istnieje debugger bash, bashdb , który jest instalowalnym pakietem na wielu dystrybucjach. Używa wbudowanego rozszerzonego trybu debugowania bash (
shopt -s extdebug
). Wygląda bardzo podobnie do gdb; Oto przykładowa sesja, która doda smaku:Podobnie jak w gdb, instrukcja jest wyświetlana tuż przed jej wykonaniem. Możemy więc badać zmienne, aby zobaczyć, co zrobi instrukcja, zanim to zrobi.
Nie tego chcemy! Spójrzmy jeszcze raz na rozszerzenie parametru.
OK, to działa. Ustawmy
newf
prawidłową wartość.Wygląda dobrze. Kontynuuj skrypt.
źródło
Standardową metodą debugowania skryptów w większości powłok opartych na Bourne, takich jak bash, jest pisanie
set -x
u góry skryptu. To sprawi, że bash będzie bardziej gadatliwy na temat tego, co jest robione / wykonywane i jak argumenty są oceniane.jest to przydatne dla interpretera lub skryptów wewnętrznych. Na przykład:
Powyżej możemy zobaczyć, dlaczego szukanie kończy się niepowodzeniem z powodu niektórych pojedynczych cudzysłowów.
Aby dezaktywować tę funkcję, po prostu wpisz
set +x
.źródło
Korzystanie z Eclipse
Możesz użyć połączonego środowiska Eclipse i Shelled ze skryptem „_DEBUG.sh”, do którego link znajduje się poniżej.
http://sourceforge.net/projects/shelled/files/shelled/update/
http://sourceforge.net/projects/basheclipse/
Przełączanie pocisków
Domyślnie narzędzie programistyczne Shelled używa
/bin/dash
jako interpretera. Zmieniłem to, aby/bin/bash
uzyskać lepszą zgodność z większością przykładów powłok w Internecie i moim środowisku.UWAGA: Możesz to zmienić, przechodząc do: Okno -> Preferencje -> Skrypt powłoki -> Tłumacze
Instrukcje instalacji
Pakiet debuggera zawiera kroki umożliwiające użycie
_DEBUG.sh
skryptu do debugowania skryptu, który jest w zasadzie (readme.txt):Interfejs debugowania bash
Ten debugger bash posiada wszystkie funkcje standardowych debuggerów programistycznych, takich jak:
Shelled (Shell Script Editor) IDE (zintegrowane środowisko programistyczne) ma dodatkową zaletę polegającą na sprawdzaniu kontekstu, podświetlaniu i wcięciach podczas pisania skryptu. Jeśli nie zostanie prawidłowo wcięte, możesz od razu oznaczyć tam wiele błędów.
Są też inne korzyści IDE, takie jak:
źródło
W ostatnich latach pojawił się wspaniały zasób: http://shellcheck.net
pokazuje więcej niż zwykłe bash, pozwalając łatwo znaleźć te irytujące niezamknięte cytaty lub nawiasy klamrowe itp.
Tylko upewnij się, że nie wklejasz wrażliwych informacji (IP, haseł itp.) W sieci ... (zwłaszcza, że jest to http, niezaszyfrowane) (Wierzę, że shellcheck jest również dostępny do pobrania, ale nie jestem pewien)
źródło
Obecnie istnieje debugowanie VS Code Bash.
https://marketplace.visualstudio.com/items?itemName=rogalmic.bash-debug
Ma „Step in / out / over”, a także pokazuje wartość każdej zmiennej.
źródło
po prostu użyj:
to samo dla powłoki:
źródło