コマンド出力を画面とシステムログに送信する

コマンド出力を画面とシステムログに送信する

コマンドの出力をシステムログに送信しようとしていますが、これがこれまでに得た結果です。

#!/bin/bash
log()
{
    logger -s -t $(basename $0) "$@"
}

/bin/echo "test" 2>&1 | (log)

これは非常にうまく動作します!

[root@server bin]# sh /var/tmp/script.sh 
script.sh: test

しかし、ログメッセージの先頭に文字列を追加しようとするとうまくいきません!

#!/bin/bash
log()
{
    logger -s -t $(basename $0) "DEBUG: $@"
}

/bin/echo "test" 2>&1 | (log)

これが出力です

[root@server bin]# sh /var/tmp/script.sh
script.sh: DEBUG:

$@/$* 変数を解凍し、元のコマンドの標準出力を失うことなくログメッセージにプレフィックスを追加するにはどうすればよいですか。

ベストアンサー1

文書化された動作は次のとおりです。

情報

このメッセージをログに記録します。指定されておらず、-fフラグが指定されていない場合は、標準入力に書き込みます。

幸いなことに、ロガーの標準入力に必要な情報を追加できます。

log()
{
    {
        printf "DEBUG: $@"          # Prepends the prefix.
        cat                         # Outputs the original input.
    } | logger -s -t $(basename $0)
}

おすすめ記事