如何在出現錯誤時退出 shell 腳本並向使用者發送訊息?

如何在出現錯誤時退出 shell 腳本並向使用者發送訊息?

我有一個/bin/fooshell 腳本檔。

如何在出現錯誤時退出 shell 腳本並向使用者發送訊息?

如果我只是使用set -e那麼它會因錯誤而退出,但在遇到錯誤時不會執行任何命令,例如向 STDOUT 發送訊息或發送郵件。

問題:如果 shell 腳本執行出錯,如何執行指令?

SLES12,bash。

答案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"

相關內容