14.03.2020

Bash dobrze nadaje się do automatyzacji i spajania narzędzi w jeden prosty skrypt. Opiszę tutaj kilka przydatnych w debugowaniu wskazówek. (pozostawię nazwy angielskie, ze względu na ich popularność – nawet na Polskich stronach)

Status zakończenia (Exit status)

ls /some/src/
echo $?

Jeśli echo pokaże 0 to oznacza, że poprzednie polecenie zwróciło poprawne wykonanie. Inne sytuacje sugerują błąd.

Śledzenie poleceń (tracing)

set -o xtrace

Powyższe polecenie dodane na samej górze skryptu powoduje wyświetlanie się każdej komendy przed jej wykonaniem.

Zakończenie skryptu w przypadku błędu

set -o errexit

Wymusza natychmiastowe zakończenie skryptu jeśli wystąpił jakikolwiek błąd.

Zakończenie skryptu w przypadku błędu w potoku (pipeline)

set -o pipefail

W potoku echo $? zwraca kod ostatniej operacji. Powyższe poleceniem wymusza zakończenie jeśli w jakimkolwiek miejscu w potoku wystąpi błąd.

Sprawdzenie deklaracji zmiennych

set -o nounset

Dodanie powyższej linijki wymusza sprawdzenie, przed uruchomieniem, czy wszystkie zmienne mają jakieś wartości.

Argument opcjonalne

A="${1:-innawartosc}"

Wartość domyślna zmiennej A to”“innawartosc”.

Podsumowanie

if [[ "${DEBUG:-FALSE}" != "FALSE" ]]; then
    set -o errexit # exit if some command fails
    set -o nounset # check if all variables are fill
    set -o pipefail # exit if some command in pipe fails
    set -o xtrace # print all executed commands
fi

Powyższe polecenia będą aktywne jeśli ustawimy zmienną DEBUG="True".

Źródła