如何在bash中捕获永无止境的进程的示例输出?

时间:2016-10-06 23:29:43

标签: bash process output

我使用的工具只能使用Ctrl-C(或kill)来中断。这是监视某个组件并每隔几秒报告一些信息。该工具不支持指定限制在退出前检查组件的次数。所以它会一直运行直到它停止。

如何将此输出的样本捕获到变量中以进行进一步处理?我还必须停止这个监控工具并继续处理。

2 个答案:

答案 0 :(得分:1)

您可以将数据输出到文件,然后在该文件上运行tail以获取当前输出。当文件太大时,您可以清除该文件。如果您想要更具体的答案,您需要提供更多详细信息。 例如,如果您的流程被称为printJunk,则可以将其作为

启动
./printJunk >>afile.txt

然后./printJunk正在运行的任何时间,您可以运行以下命令将最近的10行变为变量:

someVariable=$(tail -n 10 afile.txt)

查看文件的输出并将其分配给变量不会对./printJunk的运行时产生任何影响。

当afile.txt变得太大时,请使用echo> afile.txt将其清空。同样,./printJunk并不关心这种情况。

答案 1 :(得分:1)

如果您将工具传输到另一个程序, 程序退出,则下次尝试写入(现已关闭)管道时,您的工具将收到SIGPIPE信号退出。

这是一个捕获工具前10行输出的示例。

sample=$(your-tool | head -10)