コマンドの出力をシステムログに送信しようとしていますが、これがこれまでに得た結果です。
#!/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)
}