Pentru a depana un script bash aveți mai multe opțiuni, iar unele dintre acestea sunt chiar mai eficiente decât redirecționarea stdout/stderr.
Activati urmă
Ați putea adăuga la dvs ~/.bash_profile
(crearea unei urme numai pentru anumite părți ale scriptului dvs.) cu
set -x # activează depanarea de aici
<comenzi>
setați +x # opriți depanarea de aici
De asemenea, set -v
imprimă linii de intrare shell pe măsură ce sunt citite și set +v
dezactivează acest lucru.
Numai cu aceasta veți înțelege problema.
Urmă de redirecționare
Utilizare Variabila Bash BASH_XTRACEFD
Dacă este setat la un număr întreg care corespunde unui descriptor de fișier valid, Bash va scrie rezultatul de urmărire generat atunci când âset -xâ este activat la acel descriptor de fișier. Acest lucru permite ca rezultatul urmăririi să fie separat de mesajele de diagnostic și de eroare. Descriptorul de fișier este închis când BASH_XTRACEFD este dezactivat sau i se atribuie o nouă valoare. Dezactivarea BASH_XTRACEFD sau atribuirea șirului gol determină trimiterea ieșirii de urmărire la eroarea standard. Rețineți că setarea BASH_XTRACEFD la 2 (descriptorul fișierului de eroare standard) și apoi dezactivarea acestuia va duce la închiderea erorii standard.
Deci ai folosi
exec 5> ~/bash_profile_ouput.txt
BASH_XTRACEFD="5"
<comenzi>
dezactivați BASH_XTRACEFD
Tipăriți numerele de rând
Utilizare Variabila Bash LINENO
(și BASH_LINENU
, BASH_SOURCE
și/sau FUNCNAME
în cazuri mai elaborate)
echo „Se execută ${LINENO}”
<comenzi>
Redirecționează stdout/stderr
Combina comanda exec
cu redirecționare și, eventual tricou
.
Vezi raspunsuri Aici, care includ și alte metode/„trucuri” decât utilizarea exec
.
Legate de:
- https://stackoverflow.com/questions/44249890/pipe-bash-stdout-only-in-debug-mode
- https://unix.stackexchange.com/questions/334382/find-out-what-scripts-are-being-run-by-bash-on-startup
- https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script