J'essaie de créer des rapports d'erreurs en utilisant un Trap pour appeler une fonction sur toutes les erreurs :
Trap "_func" ERR
Est-il possible d'obtenir de quelle ligne le signal ERR a été envoyé ? Le shell est bash.
Si je fais cela, je peux lire et signaler quelle commande a été utilisée et enregistrer/effectuer certaines actions.
Ou peut-être que je me trompe complètement ?
J'ai testé avec ce qui suit :
#!/bin/bash
trap "ECHO $LINENO" ERR
echo hello | grep "asdf"
Et $LINENO
revient 2. Ne fonctionne pas.
Réponse acceptée :
Comme indiqué dans les commentaires, votre citation est fausse. Vous avez besoin de guillemets simples pour empêcher $LINENO
d'être développé lorsque la ligne de trappe est analysée pour la première fois.
Cela fonctionne :
#! /bin/bash
err_report() {
echo "Error on line $1"
}
trap 'err_report $LINENO' ERR
echo hello | grep foo # This is line number 9
Exécution :
$ ./test.sh
Error on line 9