tee 管道和 pnmtools - 截断文件

tee 管道和 pnmtools - 截断文件

此命令序列工作正常:

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

但重做管道以使用“tee”截断输出在转储文件中:

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

我不清楚“tee”将标准输入发送到转储文件中保存的内容有何区别 - 为什么“dump2”被截断,并且与“dump1”不同?

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

我怀疑它与“pnmfile”有关,因为在管道末尾放置其他内容似乎可以正常工作 -“dump3”的大小/内容与 dump1 相同,并且是管道的末尾(“fmt”)正在对文件执行某些操作...:

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)

答案1

pngtopnm file.png 2> /dev/null | tee dump2 | pnmfile

pnmfile只读取直到有足够的信息来输出文件信息,然后关闭管道。此时,tee 会关闭管道,并且 dump2 也会关闭。

尝试tee -p dump2

相关内容