Ich versuche, eine Fehlerberichterstattung mit einem Trap zu erstellen, um eine Funktion für alle Fehler aufzurufen:
Trap "_func" ERR
Ist es möglich herauszufinden, von welcher Leitung das ERR-Signal gesendet wurde? Die Shell ist bash.
Wenn ich das tue, kann ich lesen und berichten, welcher Befehl verwendet wurde, und einige Aktionen protokollieren/durchführen.
Oder gehe ich vielleicht ganz falsch vor?
Ich habe mit folgendem getestet:
#!/bin/bash
trap "ECHO $LINENO" ERR
echo hello | grep "asdf"
Und $LINENO
kommt zurück 2. Funktioniert nicht.
Akzeptierte Antwort:
Wie in den Kommentaren erwähnt, ist Ihr Zitat falsch. Sie benötigen einfache Anführungszeichen, um $LINENO
zu verhindern nicht erweitert wird, wenn die Trap-Zeile zum ersten Mal geparst wird.
Das funktioniert:
#! /bin/bash
err_report() {
echo "Error on line $1"
}
trap 'err_report $LINENO' ERR
echo hello | grep foo # This is line number 9
Ausführen:
$ ./test.sh
Error on line 9