Trap, ERR et en écho à la ligne d'erreur

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