Sim, você pode fazê-lo com grep -vz
, que diz grep
para encontrar linhas que não correspondam ao padrão fornecido por você ( -v
) e para ler a taxa de entrada inteira de uma vez ( z
). de modo que uma correspondência significa que a coisa toda falha:
$ printf 'foo\nbar\n' | grep -zqv foo && echo no || echo yes
yes
$ printf 'foo\nbar\n' | grep -zq foo && echo no || echo yes
no
Então, no seu caso, algo como:
run_mongo(){
mongo foo bar baz 2>&1 | grep -vzq "whatever means failure"
}
if run_mongo; then
echo "Worked!"
else
echo "Failed!"
fi
Se você quiser evitar ler toda a saída, use outra ferramenta. Perl, por exemplo:
mongo foo bar baz 2>&1 | perl -ne 'exit 1 if /whatever means failure/'