Przydatne flagi: Bash

detektywi.it 2 lat temu
Zdjęcie: bash logo


W poprzednim wpisie pokazałem kilka przydatnych flag do curla. Jednak o ile chcemy uruchamiać go w powłoce warto i do niej dodać kilka opcji, aby zachowanie było zgodne z intuicją.

-u

Domyślnie jeżeli jakaś zmienna nie jest zdefiniowana próba odwołania się do niej zwraca pustą wartość. Nie zawsze jest to działanie zamierzone gdyż zwykła literówka może nas kosztować godziny debugowania skryptu.

#!/bin/bash url="detektywi.it" echo $URL > #!/bin/bash set -u url="detektywi.it" echo $URL > line 4: URL: unbound variable

-e

Ta flaga zapewnia, iż skrypt natychmiast się zakończy jeżeli któraś komenda zwróci błąd. Domyślnie jeżeli coś pójdzie nie tak nasz program pójdzie dalej. Jest to dość ważne w przypadku skryptów bo w najgorszym przypadku wszystko będzie wyglądało OK a jednak jakaś część programu wykona się niepoprawnie.

#!/bin/bash curl -X POST -f https://detektywi.it echo OK > curl: (22) The requested URL returned error: 406 > OK #!/bin/bash set -e curl -X POST -f https://detektywi.it echo OK > curl: (22) The requested URL returned error: 406

-o pipefail

O ile -e przerywa skrypt po błędzie to ignoruje ona błędy podczas procesowania potoku. A to znaczy, iż jeżeli któryś element potoku zwróci kod różny od 0 to i tak dostaniemy kod ostatniego polecenia.

#!/bin/bash curl -X POST -fsS https://detektywi.it | echo OK echo $? > OK > curl: (22) The requested URL returned error: 406 > 0 #!/bin/bash set -o pipefail curl -X POST -fsS https://detektywi.it | echo OK echo $? > OK > curl: (22) The requested URL returned error: 406 > 22

-x

Czasem potrzebujemy debugować nasz skrypt. Wtedy -x jest idealnym rozwiązaniem. Przed wykonaniem każda komenda zostanie wyświetlona wraz z rozwiniętymi zmiennymi. Każdy wpis debugowania dostanie prefiks + aby można go było łatwo odróżnić od wyjścia z programu.

#!/bin/bash set -x URL=detektywi.it curl $URL > + URL=detektywi.it > + curl detektywi.it

TLDR

set -euxo pipefail
Idź do oryginalnego materiału