我有一个/bin/foo
shell 脚本文件。
如何在出现错误时退出 shell 脚本并向用户发送消息?
如果我只是使用 aset -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"