次のコマンドシーケンスはうまく機能します。
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
ただし、「ティー」を使用するようにパイプを再実行してください。出力のトリミングダンプファイルから:
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
。