GNU/Linux >> Znalost Linux >  >> Linux

Trap, Err, A Echoing the Error Line?

Snažím se vytvořit nějaké chybové hlášení pomocí pasti pro volání funkce na všechny chyby:

Trap "_func" ERR

Je možné zjistit, z jaké linky byl signál ERR odeslán? Skořápka je bash.

Pokud to udělám, mohu číst a hlásit, jaký příkaz byl použit, a zaznamenávat/provádět některé akce.

Nebo možná jdu na to úplně špatně?

Testoval jsem s následujícím:

#!/bin/bash
trap "ECHO $LINENO" ERR

echo hello | grep "asdf"

A $LINENO se vrací 2. Nefunguje.

Přijatá odpověď:

Jak bylo uvedeno v komentářích, vaše citace je špatná. Abyste zabránili $LINENO, potřebujete jednoduché uvozovky z rozbalení při prvním analyzování linie pasti.

Toto funguje:

#! /bin/bash

err_report() {
    echo "Error on line $1"
}

trap 'err_report $LINENO' ERR

echo hello | grep foo  # This is line number 9

Spuštění:

 $ ./test.sh
 Error on line 9

Linux
  1. Manipulace s úchopy kláves a ukazatelů X na příkazovém řádku?

  2. Tisknout odpovídající čáru a N-tou čáru ze shodné čáry?

  3. Odstranit řádek obsahující určitý řetězec a následující řádek?

  1. Připojit odpovídající text k řádku?

  2. Zarovnání podle řádku mezipaměti a znalost velikosti řádku mezipaměti

  3. prohlížení vlastností/atributů dll a exe souborů přes příkazový řádek

  1. Výsledek Ls *, Ls ** a Ls ***?

  2. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  3. Jak zjistím číslo řádku v Bash, když došlo k chybě?