![シェルスクリプトでエラーをキャッチしない](https://rvso.com/image/89179/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81%E3%81%97%E3%81%AA%E3%81%84.png)
プログラムをコンパイルするスクリプトがあります。このプログラムは、まず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
...