【问题标题】:How to pipe a process' output to logger command and to head command?如何将进程的输出通过管道传输到 logger 命令和 head 命令?
【发布时间】:2016-04-18 12:32:38
【问题描述】:

我想做的是:

  • 启动一个连续输出文本的进程

  • 将输出传递给两个命令:

    1. 记录器脚本
    2. 'head' 命令,所以我可以将第一行保存为初始进程输出。

到目前为止我尝试过的(不成功)是:

./myProgram | tee > (myLogger log.txt) | head > firstLines.txt

问题是myProgramhead 完成后立即退出。

即使我在tee 命令中使用-i,我也无法让myProgram 继续运行。

由于记录器可能会将传入的文本附加到现有文件中,因此执行 head log.txt > firstLines.txt 在这种情况下不起作用。

【问题讨论】:

  • 切换顺序。将>(...) 用于head 并为您的记录器使用普通管道?
  • 这也是我的第一个猜测,但我试过了,问题仍然存在。
  • 不太优雅的解决方案:输出到一个临时文件,然后将该临时文件附加到 log.txt,然后头临时文件,然后删除临时文件

标签: linux bash logging pipe


【解决方案1】:

可能是这样的:

yes | awk 'FNR<4 {print >>"file"; close("file")}  1' | more

yes 是您的程序,file 是您将head 的输出发送到的位置,more 是您的记录器。

【讨论】:

    【解决方案2】:

    您可以使用awk 作为替代方法来同时执行这两种操作:

    ./myProgram | 
        awk 'NR<=10{print > "firstLines.txt"} NR>10{close("firstLines.txt")} 1' > log.txt
    

    【讨论】:

    • 领先你 8 秒 - 是什么让你坚持下来了? ;-)
    • 完美运行!谢谢!
    猜你喜欢
    • 2018-08-18
    • 2019-08-17
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多