cat
continua lendo até obter EOF. Um pipe produz EOF na saída somente quando recebe EOF na entrada. O daemon de logging está abrindo o arquivo, escrevendo para ele, e mantendo-o aberto - como faz para um arquivo regular - portanto, o EOF nunca é gerado na saída. cat
apenas continua lendo, bloqueando sempre que exaure o que está atualmente no canal.
Você pode fazer isso manualmente:
$ mkfifo test
$ cat test
E em outro terminal:
$ cat > test
hello
Haverá saída no outro terminal. Então:
world
Haverá mais saída no outro terminal. Se você agora Ctrl-D a entrada, então o outro cat
terminará também.
Nesse caso, a única diferença observável entre cat
e tail -f
será se o daemon de log for encerrado ou reiniciado: cat
será interrompido permanentemente quando a extremidade de gravação do canal for fechada, mas tail -f
irá continuar (reabrindo o arquivo) quando o daemon for reiniciado.