GNU/Linux >> Tutoriales Linux >  >> Linux

¿Trap, Err y haciendo eco de la línea de error?

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

Linux
  1. ¿La diferencia entre [[ $a ==Z* ]] y [ $a ==Z* ]?

  2. ¿Eliminar línea que contiene cierta cadena y la siguiente línea?

  3. ¿Cómo dividir un archivo y mantener la primera línea en cada una de las piezas?

  4. Alineación con la línea de caché y conocimiento del tamaño de la línea de caché

  5. El concepto de 'Espacio de espera' y 'Espacio de patrón' en sed

Envía y recibe Gmail desde la línea de comandos de Linux

Domina la línea de comandos de Linux

Ohcount:el contador y analizador de líneas de código fuente

Encontrar los archivos y carpetas más grandes en la línea de comandos de Linux

MySQL la línea de comando y buscapersonas

¿Cómo encuentro el número de línea en Bash cuando ocurre un error?