如何在管道输出内容后才执行后续的命令

2019-02-05 08:41:34 +08:00
 YenvY

如下模式的一行命令

<command1>| grep blahblah | <command2>

grep 匹配到结果则执行,如果 grep 结束前没匹配到结果则 C2 不执行

比如用 strace -etrace=open 去跟踪特定文件的创建,在该文件创建时执行一个命令。

google 出一个方法是用 xargs -r,但是在 grep 出的结果有一堆空格的情况下要保证 C2 只执行一次还挺麻烦的,毕竟管道过来的内容只是当作一个信号来用,其内容没什么意义。感觉这个 C2 应该是必须要通过类似 xargs 这样的命令间接调用,想知道有没有更好的方法?

1830 次点击
所在节点    问与答
8 条回复
exip
2019-02-05 09:03:27 +08:00
你需要的不是|需要&
huskar
2019-02-05 10:45:06 +08:00
if cmd1|grep xxx
then
cmd2
fi
YenvY
2019-02-05 11:13:54 +08:00
@huskar
怪我没描述清楚。我想要的效果是如果在 C1 结束前 grep 匹配出了结果,C2 就能执行,而不必等到 C1 结束
至少 C2 和管道的其他部分是并发执行的。
YenvY
2019-02-05 11:14:22 +08:00
@exip
没看懂,能详细说说吗
huskar
2019-02-05 11:50:30 +08:00
@YenvY 写 Python 脚本吧
pkookp8
2019-02-05 12:47:34 +08:00
a=`cmd1 | grep` &
while true;do if $a;then cmd2;fi;done
pkookp8
2019-02-05 12:48:01 +08:00
@pkookp8 忽略,脑抽了
Beebird
2019-02-05 14:16:59 +08:00
C1 | grep xxxxx && C2
若 C1 | grep xxxxx 的 return code 不为 0,则不执行 C2

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/533054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX