2017-01-12 13 views
5

Moje skrypty mają jako pierwszy nauczania:Bash: jak pułapka ustawiona -e, ale nie wyjść

set -e 

tak, że gdy wystąpi błąd, skrypt zakończy działanie. Chciałabym przechwycić tę sytuację, aby pokazać komunikat informacyjny, ale nie chcę pokazywać tego komunikatu za każdym razem, gdy skrypt się kończy; TYLKO po ustawieniu -e wyzwala aborcję. Czy jest możliwe złapanie pułapki w tę sytuację?

to:

set -e 

function mytrap { 
    echo "Abnormal termination!" 
} 

trap mytrap EXIT 

error 

echo "Normal termination" 

nazywa się w każdym wyjściu (czy błąd się dzieje lub nie), które nie jest to, co chcę.

+0

Wywołanie funkcji w normalnych punktach wyjścia tak, że ustawia flagę, aby wskazać normalne zakończenie. Wartość tę można sprawdzić za pomocą funkcji pułapki, aby odróżnić zakończenie normalne od nienormalnego. – codeforester

+0

@codeforester Yepp, myślałem teraz o tych warunkach. Trochę kłopotliwe, ale – dangonfast

Odpowiedz

5

Zamiast trap na EXIT, użyj go na ERR imprezy:

trap mytrap ERR 

Pełny Kod:

set -e 

function mytrap { 
    echo "Abnormal termination!" 
} 

trap mytrap ERR 

(($#)) && error 

echo "Normal termination" 

Teraz uruchom go do generowania błędu:

bash sete.sh 123 
sete.sh: line 9: error: command not found 
Abnormal termination! 

I tu jest normalnym wyjściem:

bash sete.sh 
Normal termination 
+2

Nie byłem świadom pułapki "ERR". Ładnie wyjaśnione, @anubhava! – codeforester

+1

Dzięki anubhava. Nie po raz pierwszy widzę, jak sprawnie jesteś w bashu. Czy masz jakieś wskazówki dotyczące zaawansowanego programowania bash? Linki lub książki są mile widziane! – dangonfast

+0

Co to znaczy "(($ #)) && błąd"? :) – dangonfast