以下のbash機能があります。
run_mongo(){
mongo foo bar baz 2>&1 # send stderr to stdout
}
残念ながら、このmongoコマンドはエラーが発生した場合は1で終了しないため、stdout / stderrで一致させる必要があります。
最初の一致がある場合は、grepを使用してコード> 0で終了する方法はありますか?このような:
run_mongo | grep -e "if stdout/stderr matches this we exit with 1"
私が考える方法は次のとおりです。
run_mongo | grep -e "if stdout/stderr matches" | killer
Killerは、最初の標準入力を受け取るとすぐに終了するプログラムです。
ベストアンサー1
はい、grep -vz
これを使用して、grep
指定されたパターンと一致しない行を見つけて(-v
)全体の入力を一度に読み取るように(z
)一致すると、すべてが失敗することを意味するように指示できます。
$ printf 'foo\nbar\n' | grep -zqv foo && echo no || echo yes
yes
$ printf 'foo\nbar\n' | grep -zq foo && echo no || echo yes
no
したがって、あなたの場合は次のようになります。
run_mongo(){
mongo foo bar baz 2>&1 | grep -vzq "whatever means failure"
}
if run_mongo; then
echo "Worked!"
else
echo "Failed!"
fi
出力全体を読み取らない場合は、別のツールを使用してください。 Perlを例に挙げてみましょう。
mongo foo bar baz 2>&1 | perl -ne 'exit 1 if /whatever means failure/'