エラー時にシェル スクリプトを終了し、ユーザーにメッセージを送るにはどうすればよいでしょうか?

エラー時にシェル スクリプトを終了し、ユーザーにメッセージを送るにはどうすればよいでしょうか?

シェルスクリプトファイルがあります/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"

関連情報