Ctrl-C停止shell脚本执行

时间:2015-06-28 07:30:17

标签: shell signals copy-paste

我有一个如下的shellcript。按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

2 个答案:

答案 0 :(得分:1)

这种情况发生的唯一方法是你的shell阻止SIGINT。根据你的描述,你的shell似乎做到了。重置shell中的SIGINT,以便脚本收到SIGINT

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

trap - SIGINT

答案 1 :(得分:0)

尝试:

stty intr "^C"

如果不起作用,请尝试:

stty -a

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

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