【问题标题】:How to capture sample output of a never-ending process in bash?如何在 bash 中捕获永无止境的进程的示例输出?
【发布时间】:2016-10-06 23:29:42
【问题描述】:

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

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

【问题讨论】:

  • 您是想在工具生成一定数量的输出后停止它,还是在您获得想要处理的输出后继续该工具,稍后再单独停止它?

标签: bash process output


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    ./printJunk >>afile.txt
    

    然后./printJunk 运行时的任何时间或时间,您可以运行以下命令将最近的 10 行放入一个变量中:

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

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

    当 afile.txt 变得太大时,执行 echo >afile.txt 将其清空。同样,./printJunk 不会在意发生这种情况。

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2022-06-23
      • 1970-01-01
      相关资源
      最近更新 更多