2012-12-10 4 views

Antwort

17

Hier sind einige häufige Formen. Welches ist das Beste zu wählen, hängt davon ab, was Sie tun. Sie können jede Teilmenge oder Kombination von ihnen in einem einzigen Skript verwenden, ohne dass es sich dabei um einen schlechten Stil handelt.


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

Sie könnten in Erwägung ziehen,> & 2 an den Befehl echo anzuhängen, um es an stderr anstatt an stdout zu senden. Ansonsten perfekte Antwort. +1 – Nemo

+0

Wenn 'exit' aufgerufen wird, ist' exit' ohne Argumente dasselbe wie 'exit $?'. – jordanm

+0

@jordanm - Außer in diesen Beispielen, $? wird durch den Aufruf von 'echo' selbst modifiziert. Ein einfacher 'Exit' wird also mit dem Status Null beendet. – Nemo

5

Man könnte so etwas wie tun:

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

Oder exec es:

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

Letzteres wird der Shell-Prozess ermöglicht durch den Klonvorgang übernommen werden, und wenn es fehlschlägt, Rückkehr ein Fehler. Sie können mehr über exec here herausfinden.

+0

Fast arbeiten, aber wie kann ich ein Echo "Hier die Fehlermeldung" fügen Sie dann laufen 'exit 1 '? Ich habe versucht: '|| echo "ERROR message here" && exit 1' aber es wird immer beendet, auch bei Erfolg. Vielen Dank. – Justin

+0

Sie brauchen 'failingcommand || {echo Nachricht && exit 1; } 'weil das' && 'nicht stärker bindet als das' || '. Und dann verwendest du besser 'failingcommand || {Echo Nachricht; Ausgang 1; } ' –

0

Methode 1:

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

Methode 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 
Verwandte Themen