シェルスクリプトファイルがあります/bin/foo
。
エラー時にシェル スクリプトを終了し、ユーザーにメッセージを送るにはどうすればよいでしょうか?
単に を使用すると、set -e
エラー時に終了しますが、エラーが発生したときに、STDOUT にメッセージを送信したり、メールを送信したりするコマンドは実行されません。
質問: シェル スクリプトの実行時にエラーが発生した場合、コマンドを実行するにはどうすればよいでしょうか?
SLES12、バッシュ。
答え1
trap
スクリプトがエラーで終了したときにユーザーにメッセージを送信し、それを実行する関数を作成できます。
#!/bin/bash
set -e
on_exit () {
echo "This script has exited in error"
}
trap on_exit ERR
echo 'yes' | grep "$1"
使用中で:
$ ./script.sh yes
yes
$ ./script.sh no
This script has exited in error
答え2
古い sh でも動作させたい場合 (bash だけでなく):
#!/bin/sh
set -e
trap 'test $? -gt 0 && echo "This script has exited in error" >&2' 0
echo 'yes' | grep "$1"