it-swarm.it

Bash: esegui command2 se command1 fallisce

Voglio fare qualcosa del genere:

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

Come dovrei farlo?

51
michelemarcon

Questi dovrebbero fare quello che ti serve:

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

o

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

Petr Uzel è perfetto ma puoi anche giocare con $ $.

$? contiene il codice di uscita dall'ultimo comando eseguito e se lo usi puoi scrivere i tuoi script in modo abbastanza flessibile.

Questa domanda tocca un po 'questo argomento, Best practice per usare $? In bash? .

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

Quindi puoi anche reagire a diversi codici di uscita e fare cose diverse, se lo desideri.

25
Johan

Lo pseudo-codice nella domanda non corrisponde al titolo della domanda.

Se qualcuno ha davvero bisogno di sapere come eseguire il comando 2 se il comando 1 fallisce, questa è una semplice spiegazione:

  • cmd1 || cmd2: Verrà eseguito cmd1 e in caso di errore verrà eseguito cmd2
  • cmd1 && cmd2: Verrà eseguito cmd1 e in caso di successo verrà eseguito cmd2
  • cmd1 ; cmd2: Verrà eseguito cmd1, quindi verrà eseguito cmd2, indipendentemente dall'errore o dal successo dell'esecuzione cmd1.