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èsexitet - 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.