Por que `cat` seguido de acréscimo a um arquivo parece se sobrescrever?

Por que `cat` seguido de acréscimo a um arquivo parece se sobrescrever?

Considere os dois (conjuntos de) comandos a seguir:

$ cat *.d | wc -l

e

$ rm -f tmp
$ cat *.d >> tmp
$ cat tmp | wc -l

Eu esperaria que os dois produzissem o mesmo valor. No entanto, quando executo isso em um diretório específico que possuo, vejo o seguinte:

$ cat *.d | wc -l
7026

e em comparação:

$ rm -f tmp
$ cat *.d >> tmp
$ cat tmp | wc -l
295

Parece que o meu catestá tropeçando no próprio rabo, se você me permite o trocadilho. O que esta acontecendo aqui? Observe que se eu usar >em vez de >>então obtenho a saída esperada de 7026.

Editar:

Para obter mais informações, o problema surge em uma VM CentOS 7 local (que está sendo executada em um Mac). Eu não deveria ter acabado de executar a "mesma coisa" em uma VM separada e não obtive a mesma saída acima, ambos os conjuntos de comandos retornam a mesma saída.

Em ambos os casos, a versão caté 8.22 e a versão bashé 4.2.46(2).

informação relacionada