Les autres réponses ont bien couvert la question directe, mais vous pouvez également être intéressé par l'utilisation de set -e
. Avec cela, toute commande qui échoue (en dehors de contextes spécifiques comme if
tests) entraînera l'abandon du script. Pour certains scripts, c'est très utile.
Essayez :
my_command || { echo 'my_command failed' ; exit 1; }
Quatre changements :
- Modifier
&&
à||
- Utilisez
{ }
à la place de( )
- Introduire
;
aprèsexit
et - espaces après
{
et avant}
Puisque vous voulez imprimer le message et quitter uniquement lorsque la commande échoue (sortie avec une valeur non nulle), vous avez besoin d'un ||
pas un &&
.
cmd1 && cmd2
exécutera cmd2
quand cmd1
réussit (valeur de sortie 0
). Où comme
cmd1 || cmd2
exécutera cmd2
quand cmd1
échoue (valeur de sortie différente de zéro).
Utilisation de ( )
fait que la commande à l'intérieur s'exécute dans un sous-shell et en appelant un exit
à partir de là, vous quittez le sous-shell et non votre shell d'origine, donc l'exécution continue dans votre shell d'origine.
Pour surmonter cela, utilisez { }
Les deux derniers changements sont requis par bash.