GNU/Linux >> Linux Esercitazione >  >> Linux

Trap, Err, e facendo eco alla linea di errore?

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

Linux
  1. Il risultato di Ls * , Ls ** e Ls ***?

  2. Manipolare il tasto X e il puntatore sulla riga di comando?

  3. Stampa la riga di corrispondenza e l'ennesima riga dalla riga di corrispondenza?

  4. Aggiungere il testo abbinato alla riga?

  5. Come dividere un file e mantenere la prima riga in ciascuno dei pezzi?

Invia e ricevi Gmail dalla riga di comando di Linux

Copia e incolla nella riga di comando di Linux con xclip

Padroneggia la riga di comando di Linux

Ohcount - Il contatore e l'analizzatore di linee di codice sorgente

Trovare i file e le cartelle più grandi nella riga di comando di Linux

MySQL la riga di comando e i cercapersone