GNU/Linux >> Tutoriels Linux >  >> Linux

Piège, erreur et écho de la ligne d'erreur ?

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

Linux
  1. Copiez et collez sur la ligne de commande Linux avec xclip

  2. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  3. Comment changer la longueur de ligne par défaut pour Od et Hexdump ?

  4. Ajouter le texte correspondant à la ligne ?

  5. Comment scinder un fichier et conserver la première ligne dans chacun des morceaux ?

Envoyer et recevoir Gmail à partir de la ligne de commande Linux

Maîtrisez la ligne de commande Linux

Ohcount - Le compteur et l'analyseur de lignes de code source

Recherche des fichiers et dossiers les plus volumineux dans la ligne de commande Linux

MySQL la ligne de commande et les pagers

Comment puis-je trouver le numéro de ligne dans Bash lorsqu'une erreur s'est produite ?