
コマンドの出力をシステムログに送信しようとしていますが、これがこれまでに得た結果です。
#!/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)
}
答え2
関数に引数を渡すことは、読み取りと同じでも異なっていても$1
かまいません。$@
stdin
stdin
まず、データを取得する必要があります。以下は理想的な解決策ではありませんが、ヒントを与えるでしょう。
#!/bin/bash
log()
{
read INPUT
logger -s -t $(basename $0) "DEBUG: $INPUT"
}
echo "test" | (log)