2

私は次のことをしたいと思います。

  1. stdout のコピーをログファイルにリダイレクトし、stdout を画面に表示します。
  2. stderr を同じログファイルにリダイレクトし、画面に表示しません。

画面への stdout のないコード:

#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' >> common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2

ログ:

INF: some txt
INF: some more txt
ERR: an error
ERR: one more error

最初の問題はバッファリングであり、バッファリングされていない場合は sed '-u' で無効にしようとしました。

画面への stdout を使用したコード:

#!/bin/bash
exec 1> >(sed -u 's/^/INF: /' | tee -a common.log)
exec 2> >(sed -u 's/^/ERR: /' >> common.log)
echo "some txt"
echo "an error" >&2
echo "some more txt"
echo "one more error" >&2

その結果、画面がハングし (Ctrl-C を使用する必要がありました)、ログがまだバッファリングされます。提案?

4

1 に答える 1

2

これはあなたのために働きますか?

command 2> >(sed -u 's/^/ERR: /' >> common.log) | sed -u 's/^/INF: /' | tee -a common.log

あなたの命令はどこcommandにありますか。

于 2012-11-16T07:12:10.867 に答える