いくつかのプログラムをテストするためのbashスクリプトがあり、プログラムの1つが返されるので、Segmentation fault
スクリプトヘッドにトラップを追加してみました。
trap "echo 'segfault occured!'" SIGSEGV
しかし、これは何の効果もありませんでした。使った
echo $?
segfaultを生成するプログラムの直後に139出力として。この特定のエラーコードのトラップをどのように追加できますか?
ベストアンサー1
trap "$instructions" SIGSEGV
シェル自体から分割エラーをキャッチします。
でスクリプトを実行すると(または)トラップを配置できますset -e
。スクリプトが終了したときに実行されます(ゼロ以外の状態を返すコマンドのため、明示的な呼び出しまたはスクリプトの終わりから外れた場合)。分割エラーをテストするには、トラップのエントリポイントを確認してください。 (プログラムは正常に状態139に返されるため、おそらく139です。シェルで実行している場合はこれを回避できます。)EXIT
0
exit
$?
$?
set -e
trap 'case $? in
139) echo "segfault occurred";;
esac' EXIT
set -e
Bash、ksh、またはzshでは、ゼロ以外の状態を返すすべてのコマンドの後にトラップを実行する必要はなく、代わりにトラップを配置できますERR
。以前と同様に、$?
トラップのエントリポイントを確認する必要があります。 139は、(まれに)プログラムがこの状態を返したことを意味します。