Почему `cat`, за которым следует добавление в файл, перезаписывает сам себя?

Почему `cat`, за которым следует добавление в файл, перезаписывает сам себя?

Рассмотрим следующие два (набора) команд:

$ cat *.d | wc -l

и

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

Я ожидал, что оба эти варианта выведут одно и то же значение. Однако, когда я запускаю это в определенном каталоге, который у меня есть, я вижу следующее:

$ cat *.d | wc -l
7026

и в сравнении:

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

Кажется, что мой catспотыкается о собственный хвост, если вы простите за каламбур. Что здесь происходит? Обратите внимание, что если я использую >вместо >>, то я получаю ожидаемый вывод 7026.

Редактировать:

Для получения дополнительной информации, проблема возникает на локальной виртуальной машине CentOS 7 (которая работает на Mac). Я должен заметить, что я только что запустил «то же самое» на отдельной виртуальной машине и не получил тот же вывод, что и выше, оба набора команд возвращают тот же вывод.

В обоих случаях версия cat— 8.22, а версия bash— 4.2.46(2).

Связанный контент