回答:
process_a | tee >(process_b) | wc --bytes
動作する可能性があります。その後、wc
のカウントを必要な場所にリダイレクトできます。/にprocess_b
何かを出力する場合、おそらくこれをどこかにリダイレクトする必要があります。stdout
stderr
/dev/null
少し不自然な例:
filestore:~# cat document.odt | tee >(dd of=/dev/null 2>/dev/null) | wc --bytes
4295
説明として:tee
複数のファイル(およびstdout)に出力を向けることができ、>()
コンストラクトはbashの「プロセス置換」であり、この場合、プロセスは書き込み専用ファイルのように見えるため、プロセスとファイルにリダイレクトできます(多くのプロセスに出力を送信するための使用例については、こちらまたはこの質問と回答をご覧くださいtee
)。
私はパーティーに遅れていることは知っていますが、この便利なスレッドを強化できる良い答えがあると思います。
これは@Phil Pと@David Spillettの回答の組み合わせですが、
Bytes-countは、process_bの出力とともにstdoutに出力されます。
出力を使用するときに、バイトを含む行を識別するために接頭辞を使用できます(Bytes:
例)。
exec 3>&1
process_a | tee >({ echo -n 'Bytes:'; wc -c; } >&3) | process_b
exec 3>&-
警告:
出力
の行の順序に依存しないでください。順序は予測不能であり、同じパラメータで同じスクリプトを呼び出した場合でも、常に異なる可能性があります。
exec
してファイルに直接出力できませんでしたか?input-command | dd 2>~/fred | output-command