程序步骤

程序步骤

我实际上正在尝试编写一个 shell 脚本,将命令的输出记录到文件中,但由于该命令需要很长时间才能完成(大约 15 分钟),所以我想在命令完成之前开始解析命令的输出(文件的内容),这样我就可以向标准输出(用户)发送消息,例如:

10% complete
45% complete

等等。

程序步骤

  1. 将命令重定向到文件:$(command) > $FILE
  2. 在命令完成之前开始读取和解析输出 ($FILE)。

我考虑过使用并行编程,但我还没有掌握它。

答案1

我实际上已经使用tailStack Overflow 问题解决了这个问题在 shell 脚本中结束 tail -f 启动

# 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

谢谢大家的帮助。

答案2

tail -f 将跟随正在创建的文件。

用日志文件尝试一下。

例如 tail -f /var/log/messages。

您将看到日志文件输出到控制台,就像它们出现在日志中一样。

答案3

管道、Tee 和 Tail(Tee 是问题的核心,因为它复制了标准输出。如果 sed 是您用来解析数据的文件,则示例如下:

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在另一个窗口中运行。

答案4

使用尾部并将其导入到您的解析器中。

相关内容