2012-12-10 13 views

Odpowiedz

17

Oto kilka typowych formularzy. Wybór, który najlepiej wybrać, zależy od tego, co robisz. Możesz użyć dowolnego podzestawu lub ich kombinacji w jednym skrypcie, bez złego stylu.


if ! failingcommand 
then 
    echo >&2 message 
    exit 1 
fi 

failingcommand 
ret=$? 
if ! test "$ret" -eq 0 
then 
    echo >&2 "command failed with exit status $ret" 
    exit 1 
fi 

failingcommand || exit "$?" 

failingcommand || { echo >&2 "failed with $?"; exit 1; } 
+0

Możesz rozważyć dołączenie> i 2 do polecenia echo, aby wysłać je do stderr zamiast standardowe wyjście. W przeciwnym razie doskonała odpowiedź. +1 – Nemo

+0

Podczas wywoływania 'exit',' exit' bez argumentów jest takie samo jak 'exit $?'. – jordanm

+0

@jordanm - Z wyjątkiem tych przykładów, $? zostanie zmodyfikowane przez wywołanie samego "echo". Tak więc proste 'wyjście' zakończy się stanem zero. – Nemo

5

Można zrobić coś takiego:

git clone [email protected]:my-username/my-repo.git || exit 1 

Albo exec go:

exec git clone [email protected]:my-username/my-repo.git 

Ten ostatni pozwoli proces powłoki zostać przejęte przez operację klonu, a jeśli to się nie powiedzie, powrót błąd. Możesz dowiedzieć się więcej o exec here.

+0

Prawie pracy, ale w jaki sposób mogę dodać "komunikat o błędzie tutaj" echo następnie uruchom 'exit 1 '? Próbowałem: '|| echo "ERROR message here" && exit 1' ale zawsze wychodzi, nawet po pomyślnym zakończeniu. Dzięki. – Justin

+0

Potrzebujesz 'failingcommand || {echo message && exit 1; } 'ponieważ' && 'nie wiąże się silniej niż' || '. A następnie lepiej użyj 'failingcommand || {echo wiadomość; wyjście 1; } ' –

0

Metoda 1:

git clone [email protected]:my-username/my-repo.git || exit 1 

Metoda 2:

if ! (git clone [email protected]:my-username/my-repo.git) then 
    exit 1 
    # Put Failure actions here... 
else 
    echo "Success" 
    # Put Success actions here... 
fi 
Powiązane problemy