O manual do Bash afirma:
If bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes.
Isso significa que, apesar de o sinal ser recebido por bash quando você o envia, sua interceptação em SIGHUP só será chamada quando cat terminar.
Se esse comportamento não for desejado, use bash builtins (por exemplo, read + printf em um loop em vez de cat ) ou use trabalhos em segundo plano (consulte Resposta de Stéphane ).