我有一个如下的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
答案 0 :(得分:1)
这种情况发生的唯一方法是你的shell阻止SIGINT
。根据你的描述,你的shell似乎做到了。重置shell中的SIGINT
,以便脚本收到SIGINT
。
在shell中运行以下命令并运行脚本:
trap - SIGINT
答案 1 :(得分:0)
尝试:
stty intr "^C"
如果不起作用,请尝试:
stty -a
并找出您的设置有什么问题。如果不能,请使用stty -a的输出更新答案。
还要确保没有像其他答案中提到的那样捕获中断信号(2)。