Warum scheint sich „cat“, gefolgt vom Anhängen an eine Datei, selbst zu überschreiben?

Warum scheint sich „cat“, gefolgt vom Anhängen an eine Datei, selbst zu überschreiben?

Betrachten Sie die folgenden zwei Befehlssätze:

$ cat *.d | wc -l

Und

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

Ich würde erwarten, dass beide den gleichen Wert ausgeben. Wenn ich dies jedoch in einem bestimmten Verzeichnis ausführe, das ich habe, wird Folgendes angezeigt:

$ cat *.d | wc -l
7026

und im Vergleich:

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

Es scheint, als würde meins catüber seinen eigenen Schwanz stolpern, wenn Sie das Wortspiel verzeihen. Was passiert hier? Beachten Sie, dass ich die erwartete Ausgabe von erhalte, wenn ich >anstelle von verwende .>>7026

Bearbeiten:

Zur weiteren Information: Das Problem tritt auf einer lokalen CentOS 7-VM auf (die auf einem Mac läuft). Ich sollte nicht vergessen, dass ich gerade „dasselbe“ auf einer separaten VM ausgeführt habe und nicht dieselbe Ausgabe wie oben erhalte, beide Befehlssätze geben dieselbe Ausgabe zurück.

In beiden Fällen ist die Version cat8.22 und die Version bash4.2.46(2).

verwandte Informationen