it-swarm.com.de

Bash: Befehl ausführen, wenn der Befehl fehlschlägt

Ich möchte so etwas machen:

if cmd1 && cmd2
echo success
else
echo epic fail
fi

Wie soll ich das machen

51
michelemarcon

Diese sollten tun, was Sie brauchen:

cmd1 && cmd2 && echo success || echo epic fail

oder

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
79
Petr Uzel

Petr Uzel ist genau richtig, aber Sie können auch mit dem magischen $? Spielen.

$? Enthält den Exit-Code des zuletzt ausgeführten Befehls. Wenn Sie diesen verwenden, können Sie Ihre Skripte sehr flexibel schreiben.

Diese Frage berührt dieses Thema ein wenig, Best Practice für die Verwendung von $? In bash? .

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi

Dann können Sie auch auf verschiedene Exit-Codes reagieren und verschiedene Dinge tun, wenn Sie möchten.

25
Johan

Der Pseudocode in der Frage entspricht nicht dem Titel der Frage.

Wenn jemand wissen muss, wie Befehl 2 ausgeführt wird, wenn Befehl 1 fehlschlägt, ist dies eine einfache Erklärung:

  • cmd1 || cmd2: Dies wird cmd1 Ausführen, und im Fehlerfall wird cmd2 Ausgeführt.
  • cmd1 && cmd2: Dies wird cmd1 Ausführen, und im Erfolgsfall wird cmd2 Ausgeführt.
  • cmd1 ; cmd2: Dies führt cmd1 Und dann cmd2 Aus, unabhängig davon, ob cmd1 Fehlgeschlagen oder erfolgreich ausgeführt wurde.