BASH 陷阱 CTRL+C 然后完全退出脚本



我在 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 陷阱。

相关内容

  • 没有找到相关文章

最新更新