web-dev-qa-db-fra.com

quitter avec un message d'erreur dans bash (en ligne)

Est-il possible de sortir en cas d'erreur, avec un message, sans en utilisant les instructions if?

[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit ERRCODE "Threshold must be an integer value!"

Bien sûr, le côté droit de || ne fonctionnera pas, juste pour vous donner une meilleure idée de ce que j'essaie d'accomplir.

En fait, cela ne me dérange même pas avec quel code ERR il va sortir, juste pour montrer le message.

MODIFIER

Je sais que cela fonctionnera, mais comment supprimer numeric arg required s'afficher après mon message personnalisé?

[[ $TRESHOLD =~ ^[0-9]+$ ]] || exit "Threshold must be an integer value!"
42
branquito

exit ne prend pas plus d'un argument. Pour imprimer n'importe quel message comme vous le souhaitez, vous pouvez utiliser echo puis quitter.

    [[ $TRESHOLD =~ ^[0-9]+$ ]] || \
     { echo "Threshold must be an integer value!"; exit $ERRCODE; }
52
P.P.

Vous pouvez utiliser une fonction pour plus de commodité:

function error_exit {
    echo "$1" >&2   ## Send message to stderr. Exclude >&2 if you don't want it that way.
    exit "${2:-1}"  ## Return a code specified by $2 or 1 by default.
}

[[ $TRESHOLD =~ ^[0-9]+$ ]] || error_exit "Threshold must be an integer value!"
23
konsolebox

L'utilisation directe de exit peut être délicate car le script peut provenir d'autres endroits. Je préfère plutôt utiliser subshell avec set -e (plus les erreurs doivent aller dans cerr, pas cout):

set -e
[[ $TRESHOLD =~ ^[0-9]+$ ]] || \
     (>&2 echo "Threshold must be an integer value!"; exit $ERRCODE)
2
noonex