Je construis un script Shell qui a une if
fonction comme celle-ci:
if jarsigner -verbose -keystore $keyst -keystore $pass $jar_file $kalias
then
echo $jar_file signed sucessfully
else
echo ERROR: Failed to sign $jar_file. Please recheck the variables
fi
...
Je souhaite que l'exécution du script se termine après l'affichage du message d'erreur. Comment puis-je faire ceci?
Si vous mettez
set -e
un script, le script se terminera dès qu'une commande à l'intérieur échoue (c'est-à-dire dès qu'une commande retourne un statut différent de zéro). Cela ne vous permet pas d'écrire votre propre message, mais souvent les propres messages de la commande défaillante suffisent.L'avantage de cette approche est qu'elle est automatique: vous ne courez pas le risque d'oublier de traiter un cas d'erreur.
Les commandes dont l'état est testé par un conditionnel (tel que
if
,&&
ou||
) ne terminent pas le script (sinon le conditionnel serait inutile). Un idiome pour la commande occasionnelle dont l'échec n'a pas d'importance estcommand-that-may-fail || true
. Vous pouvez égalementset -e
désactiver pour une partie du script avecset +e
.la source
-x
indicateur avec l'-e
indicateur suffit souvent pour indiquer où se trouve votre programme à la sortie. Cela implique que l'utilisateur du script est également le développeur.Si vous voulez être capable de gérer une erreur au lieu de quitter aveuglément, au lieu d'utiliser
set -e
, utilisez untrap
sur leERR
pseudo-signal.D'autres traps peuvent être configurés pour gérer d'autres signaux, y compris les signaux Unix habituels plus les autres pseudo signaux Bash
RETURN
etDEBUG
.la source
Voici comment procéder:
la source
exit 1
est tout ce dont vous avez besoin. Le1
est un code de retour, vous pouvez donc le changer si vous voulez, par exemple,1
signifier une exécution réussie et-1
signifier un échec ou quelque chose comme ça.la source
test
ou&&
ou||
.