bash で 2 つのコマンドを使用して同じ標準入力を読み取る

bash で 2 つのコマンドを使用して同じ標準入力を読み取る

bash で 2 つの別々のコマンド <2,3> に出力をパイプしたいと思います。これを行う最善の方法は何ですか? 現時点では、次のスクリプトがあります:

command source > output
command2 output &
command3 output &

出力ファイルは約 100G で、コマンド 2 と 3 に別々にパイプするのは最適とは言えません。もっと効率的に実行できると思います。

答え1

bashの場合:command source | tee >(command2) >(command3)

からこれstackoverflow の質問です。私はこれを巨大な出力で試したことはありません。

答え2

他の回答ではこの概念が紹介されています。実際のデモンストレーションは次のとおりです。

$ echo "Leeroy Jenkins" | tee >(md5sum > out1) >(sha1sum > out2) > out3

$ cat out1
11e001d91e4badcff8fe22aea05a7458  -

$ echo "Leeroy Jenkins" | md5sum
11e001d91e4badcff8fe22aea05a7458  -

$ cat out2
5ed25619ce04b421fab94f57438d6502c66851c1  -

$ echo "Leeroy Jenkins" | sha1sum
5ed25619ce04b421fab94f57438d6502c66851c1  -

$ cat out3
Leeroy Jenkins

もちろん、> /dev/nullout3 の代わりに使用することもできます。

関連情報