tee pipeline e pnmtools - file troncato

Sep 15 2020

Questa sequenza di comandi funziona bene:

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

Ma rifare la pipeline per usare 'tee' tronca l'output nel file di dump:

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

Non sono chiaro quale differenza fa dove "tee" invia lo stdin a ciò che viene salvato nel file dump - perché "dump2" è troncato e non identico a "dump1"?

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

Sospetto che abbia qualcosa a che fare con 'pnmfile', dal momento che mettere qualcos'altro alla fine della pipeline sembra funzionare bene - 'dump3' ha la dimensione giusta / stesso contenuto di dump1 e la fine del pipe ('fmt') sta facendo qualcosa al file ...:

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)

Risposte

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

pnmfilelegge solo fino a quando non dispone di informazioni sufficienti per l'output delle informazioni sul file e quindi chiude la pipe. A quel punto il tee chiude anche il pipe e dump2.

Prova tee -p dump2.