279 votes

Gestion des erreurs en BASH

Quelle est votre méthode préférée pour gérer les erreurs en BASH ? Le meilleur exemple de gestion des erreurs en BASH que j'ai trouvé sur le web a été écrit par William Shotts, Jr à l'adresse suivante http://www.linuxcommand.org .

William Shotts, Jr suggère d'utiliser la fonction suivante pour la gestion des erreurs dans BASH :

#!/bin/bash

# A slicker error handling routine

# I put a variable in my scripts named PROGNAME which
# holds the name of the program being run.  You can get this
# value from the first item on the command line ($0).

# Reference: This was copied from <http://www.linuxcommand.org/wss0150.php>

PROGNAME=$(basename $0)

function error_exit
{

#   ----------------------------------------------------------------
#   Function for exit due to fatal program error
#       Accepts 1 argument:
#           string containing descriptive error message
#   ----------------------------------------------------------------

    echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
    exit 1
}

# Example call of the error_exit function.  Note the inclusion
# of the LINENO environment variable.  It contains the current
# line number.

echo "Example of error with line number and message"
error_exit "$LINENO: An error has occurred."

Avez-vous une meilleure routine de gestion des erreurs que vous utilisez dans les scripts BASH ?

2voto

Jim Avera Points 66

Vous pouvez utiliser le "caller" intégré pour fournir automatiquement l'emplacement de l'appel à votre fonction "mourir avec un message", ou même pour imprimer un backtrace complet.

Vous pouvez télécharger quelques fonctions bash pour faire cela à partir de http://jimavera.cixx6.com/Carp.bash

Les programmeurs Perl se sentiront comme chez eux avec ces outils.

(Désolé, je n'ai pas pu mettre le code réel dans ce message parce que le site Web de stackoverflow ne semble pas fournir de moyen d'insérer du code pour qu'il ne soit pas corrompu. La balise 'pre' supprime tous les symboles moins que du texte "préformaté", et la balise 'code' fait un peu de prettyprinting qui rend le code non valide Bash. Trop sophistiqué pour son propre bien)

1voto

Orwellophile Points 2695

Cette astuce est utile pour les commandes ou fonctions manquantes. Le nom de la fonction manquante (ou de l'exécutable) sera passé dans $_

function handle_error {
    status=$?
    last_call=$1

    # 127 is 'command not found'
    (( status != 127 )) && return

    echo "you tried to call $last_call"
    return
}

# Trap errors.
trap 'handle_error "$_"' ERR

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X