我正在尝试使用trap
命令进行清理。当我按下safe_cancel
时正在调用Ctrl + C
函数,但是脚本没有退出。我必须先使用Ctrl + Z
来暂停脚本,然后再使用kill
。
foo
是我在PATH中拥有的另一个脚本,如果收到无效的参数,它将返回一个exit 1
。
此脚本中我缺少什么或做错了什么?
#!/bin/bash
safe_cancel () {
echo "Cancelling..."
# do some cleanup here
exit 1
}
trap safe_cancel 1
while true; do
read -p "Choose an option: " someOption < /dev/tty
foo $someOption
if [[ $? == 0 ]]
then
break
exit 0
fi
done
其他详细信息:
我正在为Git挂钩编写此脚本。显然,git钩子并不完全期望标准输入/输出,因此我必须显式使用/dev/tty
编辑:
将其用作git钩子的一部分时,我收到错误消息
read: read error: 0: Input/output error
这是一个无限循环
答案 0 :(得分:2)
信号1是SIGHUP,如果终端断开,则上升,例如由于您是从远程计算机连接的,并且由于网络断开而中断了会话。当您按Ctrl + C时,将发送SIGINT。
trap safe_cancel HUP INT
这可能与您在Git中遇到的错误有关,也可能无关。