我绝望,我正在寻找一个月的多管道链接的参考/源代码,这意味着我可以运行一些东西:
cat /tmp/test.log | wc -l --> stdout
| grep test1 --> stdout
| grep test2 | grep test3 |
| grep test4 --> stdout
| grep test5 --> stdout
当tee使用文件时请不要发送给我bash / tee / $ ...命令,并且bash太复杂而无法理解......
请注意,订单并不关心,第一个已完成的链也将被处理。
答案 0 :(得分:0)
你可能应该把你正在做的事情分解成多个较小的任务,而不是试图在一击中粉碎一切。这是一个BASH脚本,可以执行您想要的相同操作,但更容易理解。
注意:我没有对此进行测试,因此可能存在问题。
#!/bin/bash
FILENAME='/tmp/test.log'
TMPNAME='mktemp -t' || exit
wc -l $FILENAME
grep 'test1' $FILENAME
awk '/test2/ && /test3/ {print}' $FILENAME > $TMPNAME
grep 'test4' $TMPNAME
grep 'test5' $TMPNAME
rm $TMPNAME
答案 1 :(得分:0)
我实际上必须为学校项目开发类似的东西。我的想法是概括管道的概念,以达到这样的目的:
process1 --> process2
--> process3 --> stdout
--> process4 --> process5 --> stdout
--> process6 --> stdout
(也可以循环)
为了做到这一点,我的程序做了以下事情:
在我的情况下,由于调用的进程也是由我开发的,我可以将管道文件描述符作为参数传递给子进程(--pipe-in .... --pipe-out .... ),但由于您使用的是基于stdin / stdout的现有程序,您可以使用dup2()来“复制”标准I / O管道。
我不知道你是否打算这样做,但这样做是可行的。