Les scripts Shell: mourir sur une erreur
Supposons qu'un script shell (/bin/sh ou /bin/bash) contenait plusieurs commandes. Comment puis-je faire proprement le script de résilier si l'une des commandes a un défaut de statut de sortie? Évidemment, on peut utiliser si des blocs et/ou des rappels, mais est-il plus propre, plus concis? À l'aide de && est pas vraiment une option, parce que les commandes peuvent être longs, ou le script pourrait avoir le non-triviales comme les boucles et instructions conditionnelles.
Vous devez vous connecter pour publier un commentaire.
Avec la norme
sh
etbash
, vous pouvezIl
Il fonctionne aussi (de ce que j'ai pu recueillir) avec
zsh
. Il devrait également travailler pour n'importe quel Bourne shell descendant.Avec
csh
/tcsh
, vous devez lancer votre script avec#!/bin/csh -e
Peut-être que vous pourriez utiliser:
<any_command> || eval 'echo "Please ensure ..." 1>&2; exit 1'
REMARQUE: Leeval
truc est nécessaire de groupe leecho
etexit
commandes sans la création d'un sous-shell; l'utilisation d'un sous-shell (que se passerait-il si vous avez utilisé parenthèses) aurait rendu leexit
inefficace.eval
truc que j'ai mentionné. Au lieu de cela, utiliser<any_command> || { echo "Please ensure ..." 1>&2; exit; }
(notez le nécessaire;
avant la fermeture}
).Vous pouvez vérifier les $? pour voir quel est le plus récent code de sortie est..
e.g