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