Jak cofnąć efekt „set -e”, który powoduje, że bash natychmiast kończy działanie, jeśli jakieś polecenie zawiedzie?

205

Po wejściu set -ew interaktywną powłokę bash, bash natychmiast zakończy działanie, jeśli jakiekolwiek polecenie zakończy się z niezerową wartością. Jak mogę cofnąć ten efekt?

Tianyi Cui
źródło

Odpowiedzi:

309

Z set +e. Tak, to w tył, które umożliwiają powłoki z opcji set -i wyłączyć je set +. Rodzynki historyczne, donchanów.

zwol
źródło
Dziękuję bardzo, jest to jedna z ostatnich linii odpowiedniej strony podręcznika ( faqs.org/docs/bashman/bashref_56.html ), której nie przeczytałem do końca.
Tianyi Cui
Podręcznik bash jest niesamowicie ogromny, to prawda. (FYI, ponieważ wydaje się, że jesteś nowy: kliknięcie znacznika wyboru pod najlepszą odpowiedzią na twoje pytanie jest zrobione, nazywa się to „akceptowaniem”.)
zwolnij
12
Niestety, język powłoki Unix (z którego większość nie jest specyficzna dla „bash”) jest jednym z najmniej spójnych wewnętrznie języków programowania, które są nadal szeroko stosowane. Będziesz musiał nauczyć się o wiele więcej tych małych brodawek. Powiedziałbym, że to błąd w dokumentacji.
zwolnienie
10
historyczne winogrona to piekło rodzynek!
James
2
Wreszcie niesprawiedliwe bashowanie Bash: single dash jest standardową opcją wiersza poleceń powłoki POSIX, a zatem najbardziej naturalne dla „zrób coś”. +jest jak, -ale przejście przez coś oznacza „nie” jak w „≠”.
Ciro Santilli 29 冠状 病 六四 事件 法轮功 法轮功
68

Używanie set +e/ za set -ekażdym razem, gdy chcesz go zastąpić, może być niewygodne . Znalazłem prostsze rozwiązanie.

Zamiast robić to w ten sposób:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

możesz to zrobić w następujący sposób:

command_that_might_fail_but_we_want_to_ignore_it || true

lub, jeśli chcesz zapisać naciśnięcia klawiszy i nie masz nic przeciwko byciu trochę tajemniczym:

command_that_might_fail_but_we_want_to_ignore_it || :

Mam nadzieję że to pomoże!

szeryf
źródło
11
Zastanawiałem się nad historią :i znalazłem tutaj moją odpowiedź , na wypadek gdyby ktoś inny był ciekawy.
3cheesewheel,
4
Dotyczy to tylko sytuacji, gdy nie obchodzi Cię kod powrotu uruchomionego polecenia.
Izaak