Ctrl-C停止shell脚本的执行

Ctrl-C停止shell脚本的执行,shell,signals,copy-paste,Shell,Signals,Copy Paste,我有一个shell脚本,如下所示。这不会在按下Ctrl-C时终止。您能否指导我如何修改以下代码以终止在Ctrl-C上作为输入的执行 #!/bin/bash validateURL() { regex='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]' string=$1 if [[ $string =~ $regex ]]

我有一个shell脚本,如下所示。这不会在按下Ctrl-C时终止。您能否指导我如何修改以下代码以终止在Ctrl-C上作为输入的执行

#!/bin/bash

validateURL()
{
        regex='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'
        string=$1
        if [[ $string =~ $regex ]]
        then
                echo "0"
        else
                echo "1"
        fi
}

RED='\033[0;31m'

echo -n "Enter the URL :"
while read URL_REGISTRY
do
        if [ $(validateURL $URL_REGISTRY) == "0" ]
        then
                break
        else
                echo -e "${RED}Wrong URL entered."
                tput sgr0
                echo -n "Enter the URL again :"
        fi
done

发生这种情况的唯一方法是,如果您的shell阻塞了
SIGINT
。根据你的描述,你的外壳似乎能做到这一点。重置shell中的
SIGINT
,以便脚本接收
SIGINT

在shell中运行以下命令并运行脚本:

trap - SIGINT
尝试:

如果不起作用,请尝试:

stty -a
找出你的设置有什么问题。如果你不能,用stty-a的输出更新你的答案


还要确保您没有捕获其他答案中提到的中断信号(2)。

谢谢,我知道这一点。但我只想使用ctrl-C.:)我不明白为什么它不会在Ctrl+C上终止。这是正确的scipt吗?您是否在代码中的任何地方设置了忽略SIGINT的trapcal?这就是我的整个脚本。当我按Ctrl-C时,它只打印“^C”,认为输入错误,并继续阅读输入。谢谢。将此添加到我的脚本解决了问题
stty -a