V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
fixmestan
V2EX  ›  问与答

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

  •  
  •   fixmestan · Feb 5, 2019 · 2211 views
    This topic created in 2648 days ago, the information mentioned may be changed or developed.

    如下模式的一行命令

    <command1>| grep blahblah | <command2>

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

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

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

    Supplement 1  ·  Feb 5, 2019
    趴在地上想了一下,最后一节改成 read -n1 && <C2>是不是就可以了...
    exip
        1
    exip  
       Feb 5, 2019 via Android
    你需要的不是|需要&
    huskar
        2
    huskar  
       Feb 5, 2019 via Android
    if cmd1|grep xxx
    then
    cmd2
    fi
    fixmestan
        3
    fixmestan  
    OP
       Feb 5, 2019
    @huskar
    怪我没描述清楚。我想要的效果是如果在 C1 结束前 grep 匹配出了结果,C2 就能执行,而不必等到 C1 结束
    至少 C2 和管道的其他部分是并发执行的。
    fixmestan
        4
    fixmestan  
    OP
       Feb 5, 2019
    @exip
    没看懂,能详细说说吗
    huskar
        5
    huskar  
       Feb 5, 2019 via Android
    @YenvY 写 Python 脚本吧
    pkookp8
        6
    pkookp8  
       Feb 5, 2019 via Android
    a=`cmd1 | grep` &
    while true;do if $a;then cmd2;fi;done
    pkookp8
        7
    pkookp8  
       Feb 5, 2019 via Android
    @pkookp8 忽略,脑抽了
    Beebird
        8
    Beebird  
       Feb 5, 2019 via Android
    C1 | grep xxxxx && C2
    若 C1 | grep xxxxx 的 return code 不为 0,则不执行 C2
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4788 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 00:14 · PVG 08:14 · LAX 17:14 · JFK 20:14
    ♥ Do have faith in what you're doing.