2015-06-28 203 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)。