Middle
Comment gérez-vous les erreurs utilisateur dans bash?
sobes.tech IA
Réponse de l'IA
En bash, les erreurs utilisateur sont principalement gérées à l'aide de:
- Codes de sortie des commandes : Chaque commande retourne un code de fin (statut de sortie).
0indique généralement le succès, toute autre valeur indique une erreur. - Structures conditionnelles :
if,elif,elsesont utilisés pour vérifier les codes de sortie. - Opérateurs logiques :
&&(et),||(ou) permettent d'exécuter des commandes en fonction du succès/échec des précédentes. - Redirections de sortie :
>(stdout),2>(stderr),&>(stdout et stderr). - Trappes (traps) : Permettent d'exécuter une commande lors de la réception d'un signal ou à la fin d'un script.
Exemples :
#!/bin/bash
# Vérification du code de sortie
if ! command_that_might_fail; then
echo "Erreur lors de l'exécution de la commande!" >&2 # Redirection vers stderr
exit 1 # Fin du script avec un code d'erreur
fi
# Opérateur logique &&
command_successful && echo "Commande réussie" || echo "La commande a échoué"
# Trap pour gérer SIGINT (Ctrl+C)
trap 'echo "Signal d'interruption reçu. Sortie..."; exit 1' SIGINT
# Redirection des erreurs et message
if command_with_errors 2> error.log; then
echo "Commande exécutée sans erreurs"
else
echo "Erreurs détectées. Détails dans error.log"
fi
Pour améliorer la fiabilité des scripts, on utilise aussi :
set -e: Le script se termine si une commande échoue (sauf dansifetwhile).set -u: Les variables doivent être définies avant utilisation.set -o pipefail: Le code de sortie d'une pipeline sera celui de la dernière commande ayant échoué.
#!/bin/bash
set -euo pipefail
# Ce script se terminera si "undefined_var" n'est pas défini
echo "$undefined_var"
# Ce script se terminera si "failing_command" retourne un code non nul
failing_command
L'utilisation de fonctions et d'arguments :
#!/bin/bash
# Fonction avec vérification des arguments
validate_args() {
if [ $# -ne 2 ]; then
echo "Utilisation : $0 <argument1> <argument2>" >&2
exit 1
fi
}
validate_args "$@"