grep - 終了 1 - 一致する場合

grep - 終了 1 - 一致する場合

以下の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/' 

おすすめ記事