Estoy tratando de crear un informe de errores usando una trampa para llamar a una función en todos los errores:
Trap "_func" ERR
¿Es posible saber desde qué línea se envió la señal ERR? El caparazón es bash.
Si hago eso, puedo leer e informar qué comando se usó y registrar/realizar algunas acciones.
¿O tal vez me estoy equivocando en todo esto?
Probé con lo siguiente:
#!/bin/bash
trap "ECHO $LINENO" ERR
echo hello | grep "asdf"
Y $LINENO
está regresando 2. No funciona.
Respuesta aceptada:
Como se señaló en los comentarios, su cita es incorrecta. Necesita comillas simples para evitar $LINENO
se expanda cuando la línea trampa se analiza por primera vez.
Esto funciona:
#! /bin/bash
err_report() {
echo "Error on line $1"
}
trap 'err_report $LINENO' ERR
echo hello | grep foo # This is line number 9
Ejecutándolo:
$ ./test.sh
Error on line 9