I'm trying to do a cleanup using trap command. The safe_cancel function is being called when I hit a Ctrl + C but the script isn't being exited. I have to use Ctrl + Z to suspend the script and then kill.
The foo is another script I have in my PATH which returns an exit 1 if it receives an invalid argument.
What am I lacking or doing wrong in this script?
#!/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
Additional details:
I'm writing this script for a Git hook. Apparently, git hooks aren't exactly expecting a standard in/out so I have to explicitly use /dev/tty 
Edit:
When using this as part of a git hook, I'm receiving the error 
read: read error: 0: Input/output error 
and it's an infinite loop
 
    