Command-Line
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)
pngtopnm file.png 2> /dev/null | tee dump2 | pnmfile
pnmfile
只讀取直到它有足夠的資訊輸出文件資訊,然後關閉管道。此時三通關閉管道和轉儲2。試試
tee -p dump2
。