Définir -e dans les scripts Bash
-
Utilisation de
set -e
en dehors du corps de la fonction dans Bash -
Utilisation de
set -e
dans le corps de la fonction dans Bash
Si la commande renvoie un état de sortie différent de zéro, l’option set -e
indique au shell de quitter. En termes simples, le shell se ferme lorsqu’une commande échoue.
Dans les scripts de gestion de paquets Debian, set -e
est également connu sous le nom de set -o errexit
. Selon la politique Debian, l’utilisation de cette option est requise dans certains scripts ; l’objectif semble être d’éviter tout risque de scénario d’erreur non gérée.
En réalité, cela signifie que vous devez comprendre les situations dans lesquelles les commandes que vous exécutez peuvent renvoyer une erreur et résoudre explicitement chacun de ces problèmes.
Utilisation de set -e
en dehors du corps de la fonction dans Bash
Écrivons un script Bash pour afficher Hello World
en utilisant la fonction hello_world
. Nous utiliserons set -e
en dehors de la fonction.
set -e
n’est utilisé que pour écrire ou définir un code d’affichage d’erreur.
#!/bin/bash
set -e
function hello_world()
{
echo "Hello World!"
}
hello_world
Production :
Hello World!
Utilisation de set -e
dans le corps de la fonction dans Bash
Maintenant, nous allons mettre set -e
à l’intérieur de la fonction dans le script ci-dessus.
#!/bin/bash
function hello_world()
{
set -e
echo "Hello World!"
}
hello_world
Production :
Hello World!
L’utilisation de set-e
à l’intérieur ou à l’extérieur d’une fonction n’affecte pas notre sortie.
set -e
Avec trap
La commande set -e
indique au terminal de lever une exception lorsqu’il détecte une erreur, provoquant l’arrêt de l’exécution du code. Le mot-clé trap
vous permet d’utiliser une fonction intégrée, ERR
, qui accepte le numéro de ligne d’erreur et le transmet à la fonction d’erreur.
Prenons un exemple.
#!/bin/bash
set -e
function error()
{
echo "error at $1"
}
trap 'error $LINENO' ERR
errors
Nous avons créé une fonction error
et utilisé la variable shell $1
pour stocker le numéro de la ligne où l’erreur s’est produite.
Production :
demo.sh: line 9: errors: command not found
error at 9
demo.sh
est le nom du fichier de script qui contient le script ci-dessus.
Si une ligne d’un script échoue, mais que la dernière ligne réussit, le script dans son ensemble est considéré comme réussi. En conséquence, il est assez facile d’ignorer l’erreur.
Être intolérant aux erreurs est bien meilleur dans les scripts, et set -e
vous le fournit.