GNU/Linux >> Linux の 問題 >  >> Linux

トラップ、エラー、およびエラーラインのエコー?

トラップを使用してすべてのエラーで関数を呼び出すエラーレポートを作成しようとしています:

Trap "_func" ERR

ERR信号が送信されたラインを取得することは可能ですか?シェルはbashです。

そうすれば、使用されたコマンドを読み取って報告し、いくつかのアクションをログに記録/実行できます。

それとも私はこれをすべて間違っているのでしょうか?

私は以下でテストしました:

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

echo hello | grep "asdf"

そして$LINENO 2を返しています。機能していません。

承認された回答:

コメントで指摘されているように、あなたの引用は間違っています。 $LINENOを防ぐには、一重引用符が必要です トラップラインが最初に解析されるときに展開されないようにします。

これは機能します:

#! /bin/bash

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

trap 'err_report $LINENO' ERR

echo hello | grep foo  # This is line number 9

実行中:

 $ ./test.sh
 Error on line 9

Linux
  1. sedにおける「ホールド空間」と「パターン空間」の概念

  2. Linux ソケットの POLLERR、POLLHUP、POLLNVAL を処理するにはどうすればよいですか?

  3. エラーが発生したときに Bash で行番号を見つけるにはどうすればよいですか?

  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. 特定の文字列と次の行を含む行を削除しますか?

  3. 一致したテキストを行に追加しますか?

  1. ファイルを分割し、各部分の最初の行を保持する方法は?

  2. キャッシュ ラインに合わせてキャッシュ ラインのサイズを知る

  3. コマンドラインからdllおよびexeファイルのプロパティ/属性を表示する