
У меня есть /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"