陷阱不会退出循环

时间:2020-03-10 13:12:18

标签: bash shell githooks

我正在尝试使用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
这是一个无限循环

1 个答案:

答案 0 :(得分:2)

信号1是SIGHUP,如果终端断开,则上升,例如由于您是从远程计算机连接的,并且由于网络断开而中断了会话。当您按Ctrl + C时,将发送SIGINT。

trap safe_cancel HUP INT

这可能与您在Git中遇到的错误有关,也可能无关。