Coloque
trap ":" SIGINT
antes do loop. Isso faz com que o shell ignore o sinal. Mas apenas no sentido de que ele executa um comando simulado, não "ignore" no sentido do manipulador de sinal.
Como o processo do shell não bloqueia esse sinal (da perspectiva do kernel), ele passa para seus processos filhos (como tail
neste exemplo).