To be clear with the title question, I understand why the former dies. I don't understand why the latter doesn't, just for adding a | cat
to the loop body.
Also maybe related,
while true; do echo y; done
dies immediately when I do ^C
, but killing
while true; do echo y | cat; done
often takes hitting ^C
more than once. Sometimes once works, other times 2 or 3 times works, then there are times where I need to hold ^C
for a while for it to die.
Both behaviors happen in both bash and zsh, although the ^C
one seems to be rarer with bash.
For both behaviors, this isn't limited to adding the pipe to cat
. | dd
, | tee
, etc. also cause them. Even echo y | true
causes it. It seems to be the presence of any pipe in the loop body.
Why does the presence of a pipe in a loop body change the loop's response to signals?