GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Trap, Err und Echo der Fehlerlinie?

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

Linux
  1. Das Ergebnis von Ls * , Ls ** und Ls ***?

  2. Manipulieren von X-Tasten- und Zeigergriffen in der Befehlszeile?

  3. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  4. Wie ändere ich die Standardzeilenlänge für Od und Hexdump?

  5. Den übereinstimmenden Text an die Zeile anhängen?

Senden und empfangen Sie Google Mail über die Linux-Befehlszeile

Meistern Sie die Linux-Befehlszeile

Ohcount – Der Quellcode-Zeilenzähler und -Analysator

Die größten Dateien und Ordner in der Linux-Befehlszeile finden

MySQL die Befehlszeile und Pager

Anzeigen von Eigenschaften/Attributen von DLL- und EXE-Dateien über die Befehlszeile