エラーストリームに自分の情報を追加してください。

エラーストリームに自分の情報を追加してください。

私たちが知っているように、次のコマンドを使用してエラーを特定のファイルにリダイレクトできます。

./some_script 2>error_log

複数のスクリプトを実行していますが、そのスクリプトのエラーをエラーファイルに入れたいと思います。

各エラーインスタンスの前にスクリプト名などの情報を追加する方法はありますか?これにより、エラーログにエラーを投稿したスクリプト名などを記録できます。

ベストアンサー1

スクリプトのエラーロギング機能を作成します。それは次のとおりです。

logerr () {
    printf '%s - %s - %s\n' \
    "$(date '+%F:%T')" \
    "$(basename "$0")" \
    "$*" >&2
}

その後、スクリプトからそれを呼び出すことができます。たとえば、次のようになります。

if false; then
    : something for pass
else
    logerr failed to be false
fi

そして2>error_log使用するたびに保証されます。追加をerror_log使用する必要があります2>>error_log


他のコマンドでエラーをキャッチして記録するには、次のコードを組み合わせてください。

#!/bin/bash

logerr () {
    local message=$*
    if [[ ! -t 0 ]]; then
        message=$(</dev/stdin)
    fi
    if [[ -n "$message" ]]; then
        printf '%s - %s - %s\n' \
        "$(date '+%F:%T')" \
        "$(basename "$0")" \
        "$*" >&2
    fi
}

ls -lts /fake/path 2>&1 >/dev/tty | logerr

標準出力を必要な適切な場所にリダイレクトします。

これにより、logerrスクリプトは標準入力(開いている場合)から読み取ることができます(プログラムをlogerrにパイプすることができます)。問題は、プログラムがstderrにエラーメッセージを送信し、stdinとは別に保持したいということです。

おすすめ記事