slh*_*hck 4 bash scripting command-line
应该很简单回答:
假设我想在Bash中执行由前一个输出确定的命令:
curl http://website.com 2> /dev/null | grep -i "test" --count | <MY-COMMAND>
Run Code Online (Sandbox Code Playgroud)
我需要的是: <MY-COMMAND>
只有在grep
有一些匹配(至少1)时才能执行.
我怎样才能做到这一点?
另外,请随意添加匹配的标签,我无法想出任何
ifne
来自Jeoy Hess的moreutils软件包的实用程序("如果标准输入不为空运行程序")将为您服务.
它的描述:
当且仅当标准输入不为空时才会运行以下命令的命令.我经常在crontabs中想要这个,如:
Run Code Online (Sandbox Code Playgroud)find . -name core | ifne mail -s "Core files found" root
您是否需要将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
Run Code Online (Sandbox Code Playgroud)
该&&
运营商执行的if-else检查的简便方法.它是一个短路操作器,这意味着只有在左侧失效时才会执行右侧操作.
如果需要将输出传递给命令,则需要将输出保存到临时文件,测试匹配,然后执行命令:
if curl http://website.com 2> /dev/null | grep -i "test" > /tmp/grep.txt; then
<MY-COMMAND> < /tmp/grep.txt
fi
Run Code Online (Sandbox Code Playgroud)