J'essaye de créer un rapport d'erreur en utilisant un piège pour appeler une fonction sur toutes les erreurs:
Trap "_func" ERR
Est-il possible d'get de quelle ligne le signal ERR a été envoyé? La coquille est bash.
Si je le fais, je peux lire et signaler quelle command a été utilisée et save / exécuter des actions.
Ou peut-être que je me trompe?
J'ai testé avec ce qui suit:
#!/bin/bash trap "ECHO $LINENO" ERR echo hello | grep "asdf"
Et $LINENO
revient 2. Ne fonctionne pas.
Comme indiqué dans les commentaires, votre citation est fausse. Vous avez besoin de guillemets simples pour empêcher $LINENO
d'être étendu lorsque la ligne de piégeage est analysée pour la première fois.
Cela marche:
#! /bin/bash err_report() { echo "Error on line $1" } trap 'err_report $LINENO' ERR echo hello | grep foo # This is line number 9
Exécuter:
$ ./test.sh Error on line 9
Vous pouvez également utiliser le bash embedded 'appelant':
#!/bin/bash err_report() { echo "errexit on line $(caller)" >&2 } trap err_report ERR echo hello | grep foo
il imprime aussi le nom du file:
$ ./test.sh errexit on line 9 ./test.sh