2015-06-28 204 views
2

我有一个shellcript如下。这不会因按Ctrl-C而终止。你能指导我如何修改下面的代码来杀死Ctrl-C上的执行作为输入。Ctrl-C停止shell脚本执行

#!/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 
+0

然后按Ctrl + Z。 –

+0

谢谢,我知道。但我只想使用ctrl-C。 :) – krckumar

+0

我不明白为什么它不会终止在Ctrl + C。这是正确的scipt吗?你是否在代码中的任何地方陷入了忽略SIGINT的问题? –

回答

1

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

运行在你的shell下运行脚本:

trap - SIGINT 
+0

谢谢。将此添加到我的脚本解决了问题 – krckumar

0

尝试:

stty intr "^C" 

如果还是不行,请尝试:

stty -a 

,弄清您的设置有误。如果你不能,用stty -a的输出更新你的答案。

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