While waiting for read builtin to complete, bash executes signal handlers in a subshell where signals are ignored. See below.
$ foo() { trap foo INT; read; } $ set -x $ foo + foo + trap foo INT + read ^C++ foo ++ trap foo INT ++ read ^C^C^C (the only way to exit is tapping enter twice; i.e finishing both reads) dash and mksh interrupts read and executes handler in CEE, zsh does something similar to bash. Is this a bug or an undocumented feature? -- Oğuz