Co robi set -e?

28

Mam skrypt, który znalazłem i próbuję go uruchomić, po prostu pobiera i instaluje biblioteki wykonawcze Apache. Pierwszy wiersz jest set -ei powoduje błąd; Co ma set -ezrobić?

spitfiredd
źródło

Odpowiedzi:

22

To wbudowane jest tak skomplikowane, że zasługuje na własną sekcję.

set pozwala zmieniać wartości opcji powłoki i ustawiać parametry pozycyjne lub wyświetlać nazwy i wartości zmiennych powłoki.

-eopcja

-mi

Wyjdź natychmiast, jeśli potok (patrz Rurociągi), który może składać się z pojedynczego prostego polecenia (patrz Proste polecenia), polecenia podpowłoki ujętego w nawiasy (patrz Grupowanie poleceń) lub jednego z poleceń wykonanych jako część listy poleceń zawartej przez nawiasy klamrowe (patrz Grupowanie poleceń) zwraca stan niezerowy. Powłoka nie kończy działania, jeśli polecenie, które się nie powiedzie, jest częścią listy poleceń bezpośrednio po słowie kluczowym chwilę lub do, część testu w instrukcji if, część dowolnego polecenia wykonanego w && lub || lista oprócz polecenia następującego po ostatnim && lub ||, dowolne polecenie w potoku, ale ostatnie, lub jeśli status zwracany polecenia jest odwracany za pomocą! Pułapka na ERR, jeśli jest ustawiona, jest wykonywana przed wyjściem powłoki.

Ta opcja dotyczy środowiska powłoki i każdego środowiska podpowłoki osobno (patrz Środowisko wykonywania poleceń) i może spowodować zamknięcie podpowłoki przed wykonaniem wszystkich poleceń w podpowłoce.

Źródło: www.gnu.org

Edytowane z powodu komentarza @ psusi poniżej.

Dodatkowo możesz przeczytać stronę podręcznika bash

man bash 

w dziale: SHELL BUILTIN COMMANDS

lub problem

help set 

za krótką wiadomość pomocy.

NickTux
źródło
1
Ponieważ jest to wbudowane polecenie, chcesz, help seta pełna instrukcja bash jest info bash, jeśli masz zainstalowany bash-doc.
psusi
Dzięki za wyjaśnienie @psusi. help seti / lub man bashsą odpowiednie dla set.
NickTux
12

set -e w skrócie, gdy znajduje się na górze skryptu bash, mówi skryptowi, aby zakończył pracę, gdy tylko dowolny wiersz w skrypcie nie powiedzie się (z pewnymi wyjątkami wymienionymi w instrukcji). [1]

Jako opcja debugowania jest często używana z set -x, aby wydrukować każdy rozszerzony wiersz polecenia przed wykonaniem ze znakiem „+”. [2]

Zobacz więcej na:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html

Devy
źródło
2
Dzięki za proste wyjaśnienie. Często widzę set -xe w Dockerfiles i teraz znam przyczynę :)
ymakux