3

通常、サーバーで実行するプロセスにはこのようなものを使用します

./runEvilProcess.sh >> ./evilProcess.log

ただし、現在Doxygenを使用しており、多くの重複出力が生成されます

出力例:

QGDict::hashAsciiKey: Invalid null key
QGDict::hashAsciiKey: Invalid null key
QGDict::hashAsciiKey: Invalid null key

そのため、非常に厄介なログになります

その行が最後に追加されたものではない場合にのみ、その行をログ ファイルに追加できる方法はありますか。

悪い例 (ただし、bash での実行方法がわからない)

$previousLine = ""
$outputLine = getNextLine()
if($previousLine != $outputLine) {
  $outputLine >> logfile.log
  $previousLine = $outputLine
}
4

2 に答える 2

5

プロセスが重複した行を続けて返す場合は、プロセスの出力を次のようにパイプしますuniq

 $ ./t.sh 
one
one
two
two
two
one
one
 $ ./t.sh | uniq
one
two
one

ログが標準エラー ストリームに送信される場合は、それもリダイレクトする必要があります。

 $ ./yourprog 2>&1 | uniq >> logfile

(重複がプログラムの複数回の実行によるものである場合、これは役に立ちませんが、確認するときにログ ファイルをパイプすることができますuniq。)

于 2012-08-30T17:31:05.203 に答える
3

フィルタスクリプトを作成します(filter.sh):

while read line; do
  if [ "$last" != "$line" ]; then
    echo $line
    last=$line
  fi  
done

そしてそれを使用します:

./runEvilProcess.sh | sh filter.sh >> evillog
于 2012-08-30T17:36:37.493 に答える