Command-Line

tee 管道和 pnmtools - 截斷文件

  • September 15, 2020

這一系列命令工作正常:

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

引用自:https://unix.stackexchange.com/questions/609529