Tee-Pipeline und pnmtools - abgeschnittene Datei

Sep 15 2020

Diese Befehlsfolge funktioniert einwandfrei:

pngtopnm file.png 2> /dev/null > dump1
pnmfile < dump1
stdin:  PPM raw, 1920 by 1080  maxval 255
ls -l dump1
-rw-r----- 1 cmb 6220817 Sep 15 14:26 dump1

Wenn Sie jedoch die Pipeline wiederholen, um 'tee' zu verwenden, wird die Ausgabe in der Dump-Datei abgeschnitten :

pngtopnm file.png 2> /dev/null | tee dump2 | pnmfile
stdin:  PPM raw, 1920 by 1080  maxval 255
ls -l dump2
-rw-r----- 1 cmb   49152 Sep 15 14:34 dump2

Ich bin mir nicht sicher, welchen Unterschied es macht, wo 'tee' stdin an das sendet, was in der Dump-Datei gespeichert wird - warum ist 'dump2' abgeschnitten und nicht identisch mit 'dump1'?

cmp dump[12]
cmp: EOF on dump2 after byte 49152, in line 4

Ich vermute, dass es etwas mit 'pnmfile' zu tun hat, da das Platzieren von etwas anderem am Ende der Pipeline in Ordnung zu sein scheint - 'dump3' hat die richtige Größe / den gleichen Inhalt wie dump1 und das Ende der Pipe ('fmt') macht etwas mit der Datei ...:

pngtopnm file.png 2> /dev/null  | tee dump3 |fmt -10 > dump4
ls -l dump[34]
-rw-r----- 1 cmb 6220817 Sep 15 14:41 dump3
-rw-r----- 1 cmb 6224311 Sep 15 14:41 dump4

(XUbuntu 20.04, Diffutils 3.7, Netpbm 10.0, Coreutils 8.30)

Antworten

1 laktak Sep 15 2020 at 22:08
pngtopnm file.png 2> /dev/null | tee dump2 | pnmfile

pnmfileLiest nur, bis genügend Informationen vorhanden sind, um die Dateiinformationen auszugeben, und schließt dann die Pipe. An diesem Punkt schließt das T-Stück das Rohr und den Dump2 ebenfalls.

Versuchen Sie es tee -p dump2.