我必须在shell脚本中处理两个信号,即EXIT
和SIGTERM
,
现在我在我的剧本中按照以下方式处理它
它工作正常,但我想知道是否有更好的方法吗?
不知怎的,我觉得trap '' EXIT
如果elif
不正确,这样可以吗?
此脚本将在具有busybox shell(ash)
而非bash shell
#!/bin/sh -eu
ERROR_MESSAGE=""
SIGNAL_TYPE=""
handle_error()
{
if [ "${SIGNAL_TYPE}" = "EXIT" ];then
if [ ! -z "${ERROR_MESSAGE}" ];then
echo "Inside handle_error():${ERROR_MESSAGE}"
exit 1
fi
echo "Normal exit"
elif [ "${SIGNAL_TYPE}" = "SIGTERM" ];then
echo "Aborted by SIGTERM signal"
trap '' EXIT
exit 1
fi
}
trap 'SIGNAL_TYPE="EXIT";handle_error' EXIT
trap 'SIGNAL_TYPE="SIGTERM";handle_error' SIGTERM
ERROR_MESSAGE="Error inside whileloop"
count=1000
while [ true ];do
count=$(( count - 1 ))
echo "Inside while count=${count}"
[ "${count}" -eq 0 ] && break
sleep 2
done
ERROR_MESSAGE=""
exit 0
任何建议/指针都会帮助我解决这个问题。