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 回答