Sto cercando di creare un rapporto di errore utilizzando un Trap per chiamare una funzione su tutti gli errori:
Trap "_func" ERR
È possibile ottenere da quale linea è stato inviato il segnale ERR? La shell è bash.
Se lo faccio, posso leggere e segnalare quale comando è stato utilizzato e registrare/eseguire alcune azioni.
O forse sto sbagliando tutto questo?
Ho testato con quanto segue:
#!/bin/bash
trap "ECHO $LINENO" ERR
echo hello | grep "asdf"
E $LINENO
sta tornando 2. Non funziona.
Risposta accettata:
Come sottolineato nei commenti, la tua citazione è sbagliata. Hai bisogno di virgolette singole per evitare $LINENO
dall'essere espansa quando la linea di trap viene analizzata per la prima volta.
Funziona:
#! /bin/bash
err_report() {
echo "Error on line $1"
}
trap 'err_report $LINENO' ERR
echo hello | grep foo # This is line number 9
Eseguirlo:
$ ./test.sh
Error on line 9