如何将进程的输出同时导向logger命令和head命令?

6
我想要做的是:
- 启动一个连续输出文本的进程 - 将该输出导向两个命令: - 一个记录器脚本 - 'head' 命令,以便保存初始进程输出的前几行。
我迄今尝试过的(不成功)是:
./myProgram | tee >(myLogger log.txt) | head > firstLines.txt
问题在于 myProgram 在 head 完成后立即退出。即使我在 tee 命令中使用了 -i,也无法让 myProgram 继续运行。
由于记录器可能将传入的文本附加到现有文件中,在这种情况下执行 head log.txt > firstLines.txt 不起作用。

1
交换顺序。对于head使用>(...),将普通的管道用于记录器? - Etan Reisner
这也是我的第一个猜测,但我尝试过了,问题仍然存在。 - Rambo Ramon
不太优雅的解决方案: 将输出写入临时文件,然后将该临时文件追加到log.txt中,接着读取临时文件的头部内容,最后删除临时文件。 - Bartez
2个回答

1
可能是这样的:

像这样:

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

其中yes是你的程序,file是你将head的输出发送到的地方,而more则是你的记录器。


1
您可以使用 awk 作为替代方案来同时执行两个操作:
./myProgram | 
    awk 'NR<=10{print > "firstLines.txt"} NR>10{close("firstLines.txt")} 1' > log.txt

1
你被我领先了8秒钟 - 你在干嘛呢?;-) - Mark Setchell
1
运行无误!谢谢! - Stefano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接