我实际上正在编写一个shell脚本,将命令的输出logging到文件中,但是由于该命令需要很长时间才能完成(大约15分钟),所以我想开始分析命令的输出(内容)在命令完成之前,所以我可以发送消息到标准输出(用户),如:
10% complete 45% complete
等等。
我想过使用并行编程,但我还没有掌握它。
我实际上已经解决了这个问题,使用tail和堆栈溢出问题结束尾部-f开始在一个shell脚本 。
# Solution ($(command) > ${FILE}) & tail -f --pid=$! ${FILE} | while read line do echo $line # Can parse each line output here # Example: send errors to log file if echo $line | grep -qi "error" then echo $line >> ${LOG} fi done
谢谢大家的帮助。
tail -f将在创build时跟随文件。
尝试一个日志文件。
例如,tail -f / var / log / messages。
您将看到日志文件输出到日志中显示的控制台。
pipe道,三通和尾巴(tee是问题的核心,因为它重复了标准输出。如果sed是你用来parsing数据的文件,一个例子是:
kbrandt@k$ a=0; while [[ a -lt 10 ]]; do > echo foo; a=$(( $a + 1)); > done | tee -a unprocessed | sed 's/foo/bar/' > processed kbrandt@kbrandt$ cat unprocessed foo foo foo ... kbrandt@kbrandt$ cat processed bar bar ...
然后,您可以将其作为作业运行并尾部处理,或者在另一个窗口中tail -f processed 。
使用tail和pipe到你的parsing器中。