我有以下脚本
#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT
while :
do
echo "Hello"
done
当我按Ctrl-时, Cwhile 循环不会停止并且echo bye
不会执行。
如果我有以下情况,也会发生同样的事情:
#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT
while echo -n ""
do
echo "Hello"
done
为什么trap会忽略SIGINT
信号?
答案1
已echo bye
执行,但你看不到它。尝试添加sleep 0.5
到您的 while 循环中,您就会看到它。
while 循环不会停止,因为您trap
使用了 Ctrl/C。如果您希望代码退出,您需要添加一个exit
命令:trap
#!/bin/bash
#
gotcha()
{
echo "Bye"
exit 1
}
trap gotcha SIGINT
while :
do
echo "Hello"
sleep 0.5
done
关于该功能需要了解的一件非常重要的事情trap
是,在脚本中的当前命令(无论是什么)完成执行之前,它不会触发。所以你不一定用它来中断长时间运行的命令。