回答应该很简单:
假设我想在Bash中执行由前一个输出确定的命令:
curl http://website.com 2> /dev/null | grep -i "test" --count | <MY-COMMAND>
我需要的是: <MY-COMMAND>
只应在grep
有一些匹配(至少为1)的情况下执行。
我怎样才能做到这一点?
另外,请随意添加匹配的标签,我无法想出任何
答案 0 :(得分:6)
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"