bash trap

Rédigé par Paulo Aucun commentaire
Classé dans : Bash Mots clés : trap, set

Trap :
Bash est capable d'intercepter les signaux envoyés par certains raccourcis claviers (comme Ctrl-C) et de changer le comportement par défaut de ces raccourcis. Il suffit pour cela d'utiliser la commande trap. Elle prend en premier argument la commande à exécuter puis les signaux sur lesquels elle doit réagir.
 

# exemple obtenu  à chaque ctrl^c 
trap "Salut les Palichons " 2 3

# execution avant chaque commande
trap "Salut les Palichons " DEBUG

# liste des signaux disponible
kill -l

Source : https://www.jujens.eu/posts/2015/Jan/09/utiliser-trap-bash/

Appel à une fonction :

# definition fonction
function cleanup() {
    echo "Cleanup : suppression du répertoire $TMP_DIR"
    rm -frv "$TMP_DIR"
}


# on appelle la fonction 'cleanup' lors à la fin du script
trap cleanup EXIT


Gestion des erreurs avec fonction 'failure' :

# definition 
trap failure INT TERM

# utilisation
cat /tmp/bazar.txt|grep 'truc'|| failure


Rappel :  parametre pipefail

# cat d'un fichier qui n'existe pas
cat /tmp/truc.txt | head
# le code retour sera toujours à 0 :(
echo $?
0

# sauf si on utilise le parametre pipefail
set -o pipefail

cat /tmp/truc.txt | head
# le code retour est correct :)
echo $?
1

Le code de retour du pipeline est la valeur de la dernière commande (la plus à droite) à sortir avec un code non nul, ou zéro si toutes les commandes s'achèvent avec succès.

Developpement en mode strict :
rajouter la ligne 'set -euo pipefail' en début de script

#!/bin/bash
set -euo pipefail

- e : sortie du script dès qu'une commande échoue
- u : génération d'une erreur dès qu'une variable indéfinie est rencontrée
- o pipefail : ne retoure 0 pour #? que lorsque toutes les commandes d'un 
pipeline se sont déroulées correctement.



 

Les commentaires sont fermés.