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

时间:2019-05-10 13:10:18

标签: bash exit trap

我已经在我的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 "\n\e[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)但不允许我退出?我该如何解决?

谢谢

2 个答案:

答案 0 :(得分:1)

上面的代码正在运行,bash shell中没有任何错误。我怀疑您已经在 dash SHELL中运行了该脚本(某些计算机的默认SHELL是 dash )。

使用以下方法运行脚本,

/ bin / bash

授予对脚本文件(chmod 777 script.sh)的执行权限,并按如下所示运行文件,

./ script.sh

答案 1 :(得分:0)

如上所述,在函数内部,exit被视为return的同义词,并且不终止程序。如果是您的问题,请尝试

kill -term $$ # send this program a terminate signal

,而不只是exit。笨拙,但总体上有效。

请注意,如果您还有一个将执行的SIGTERM陷阱。