シェルスクリプトでエラーをキャッチしない

シェルスクリプトでエラーをキャッチしない

プログラムをコンパイルするスクリプトがあります。このプログラムは、まずconfigure && makeコマンドを使用してソース コードをコンパイルし、次に を使用していくつかのテストを実行しますmake test。このスクリプトは、エラーをキャッチするためにも を使用しますset -e

今、私がやりたいことは、set -eスクリプトの設定を維持し、make testエラーが発生してもスクリプトの実行を継続することです。エラーが発生してもテストが実行されるように使用してみましたmake -k testが、コマンドによってキャッチされset -e、停止します。

どのテストが失敗するかもわかっているので、これらのエラーのキャッチをスキップするようにスクリプトに指示する方法はありますか。

答え1

make test || true

例えば

#!/bin/sh
set -e
echo hello
make test || true
echo done

結果的に

hello
make: *** No rule to make target `test'.  Stop.
done

この場合、失敗はルールの欠落 (Makefile がない :-)) によるものですが、スクリプトは続行されていることがわかります。

答え2

set -eで反転できますset +e

#!/bin/sh
set -e
configure && make
set +e
make test
...

関連情報