Bash は -e -like エラーをキャッチしますが、シャットダウンやその他の操作は行いません。

Bash は -e -like エラーをキャッチしますが、シャットダウンやその他の操作は行いません。

ゼロ以外の値を返す場合は、フラグが設定されるようにシェルスクリプトにフラグを設定したいと思います(たとえば、同様の変数が設定されていますerrors="True")。

これまで、私はスクリプトを呼び出しscriptname.sh 2>Error.logた後、次のことを検討しました。

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

より良い方法が必要です。私を啓発してください。

答え1

これがまさにtrap ERR目的です。残念ながら、同じ機能を持っていますset -eset -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"

関連情報