执行由前一个输出确定的命令(即,仅当有一些输出时)

时间:2011-04-02 16:56:01

标签: bash scripting command-line

回答应该很简单:

假设我想在Bash中执行由前一个输出确定的命令:

curl http://website.com 2> /dev/null | grep -i "test" --count | <MY-COMMAND>

我需要的是: <MY-COMMAND>只应在grep有一些匹配(至少为1)的情况下执行。

我怎样才能做到这一点?

另外,请随意添加匹配的标签,我无法想出任何

4 个答案:

答案 0 :(得分:6)

来自Jeoy Hess的ifne包的

moreutils实用程序(“如果标准输入不为空运行程序”)将为您服务。

对它的描述:

  

运行以下命令的命令   命令当且仅当标准   输入不为空。我经常想要这个   在crontabs中,如:

find . -name core | ifne mail -s "Core files found" root

答案 1 :(得分:5)

您是否需要将grep的输出传送到您的命令?如果你不这样做,答案会更简单。在这种情况下,因为grep的返回代码只有在找到匹配项时才会成功,您可以使用&&if

curl http://website.com 2> /dev/null | grep -q -i "test" && <MY-COMMAND>

if curl http://website.com 2> /dev/null | grep -q -i "test"; then
    <MY-COMMAND>
fi

&&运算符是执行if-else检查的简便方法。它是一个短路操作器,这意味着只有在左侧发生故障时才会执行右侧操作。

如果需要将输出传递给命令,则需要将输出保存到临时文件,测试匹配,然后执行命令:

if curl http://website.com 2> /dev/null | grep -i "test" > /tmp/grep.txt; then
    <MY-COMMAND> < /tmp/grep.txt
fi

答案 2 :(得分:2)

curl http://website.com 2> /dev/null | grep -i "test" && <MY-COMMAND>

从grep man页面:“如果找到选定的行,退出状态为0,否则为1”

&amp;&amp;&amp;仅当前一个命令返回退出状态0时才执行。

答案 3 :(得分:0)

curl http://www.google.com 2>/dev/null | grep window -i -c && echo "this is a success"