通常我对在我的服务器上运行的进程使用类似这样的东西
./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
}
最佳答案
如果进程连续返回重复行,通过 uniq
管道输出您的进程:
$ ./t.sh
one
one
two
two
two
one
one
$ ./t.sh | uniq
one
two
one
如果日志被发送到标准错误流,你也需要重定向它:
$ ./yourprog 2>&1 | uniq >> logfile
(如果重复项来自程序的多次运行,这将无济于事 - 但您可以在查看日志文件时通过 uniq
传输日志文件。)
关于如果不是重复行,Bash 添加到文件末尾 (>>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202290/