我在 bash 脚本中添加了一个陷阱,因此当按下 CTRL+C 时,会出现一条消息Do you want to quit ? (y/n)
这适用于脚本的大部分内容,但在其他部分失败。
我创建了一个简单的例子,显示它总是失败。
#!/bin/bash
quit() {
echo "Do you want to quit ? (y/n)"
read ctrlc
if [ "$ctrlc" = 'y' ]; then
exit
fi
}
trap quit SIGINT
trap quit SIGTERM
while true; do
echo -e "ne[91mIs everything done ? (y/n)e[0m"
read -i "y" -e yn
case $yn in
[Nn]* ) continue;;
[Yy]* )
echo -e "Done"
break;;
* ) echo -e "e[91mPlease answer yes or no.e[0m";;
esac
done
为什么当我按 CTRL+C 时会弹出Do you want to quit ? (y/n)
但不允许我退出?我该如何解决?
谢谢
上面的代码在 bash shell 中运行没有任何错误。我怀疑您在破折号外壳中运行了脚本(某些机器的默认外壳是破折号)。
使用以下方法运行脚本,
/bin/bash
或
授予脚本文件(chmod 777 script.sh)的执行权限并运行该文件,如下所示,
./script.sh
正如我上面评论的那样 - 在函数内部,exit 被视为返回的同义词,不会终止程序。如果这是您的问题,请尝试
kill -term $$ # send this program a terminate signal
而不仅仅是exit
.它很严厉,但通常有效。
请注意,如果您还有一个将要执行的 SIGTERM 陷阱。