web-dev-qa-db-ja.com

Bashは-eのようなエラーをキャプチャしますが、終了せず、他のことを行います

シェルスクリプト(bash)でフラグを設定して、ゼロ以外の値が返された場合にフラグが設定されるようにします(つまり、errors="True"のような変数を設定します)。

これまで、スクリプトをscriptname.sh 2>Error.logで呼び出してから、次のようなことを行うことを考えてきました。

 if $(wc -l error.log) != 0; then
   errors="True"

もっと良い方法がなければなりません。教えてください。

8
Gregg Leventhal

これがまさにtrap ERRの目的です。残念ながら、set -eと同じ制限と欠点があります。 set -eと同様に、条件式でゼロ以外を返すコマンドは、トラップをトリガーします。次にいくつかのサンプルコードを示します。

error=0
set_error() {
    (( error++ )) 
}

trap set_error ERR
ls askdjasdaj 2>/dev/null
false
false || true # false returns non-zero but is not counted due to the conditional
echo "$error" # outputs "2"
6
jordanm