Lendo o mesmo stdin com dois comandos no bash

Lendo o mesmo stdin com dois comandos no bash

Eu gostaria de canalizar uma saída para dois comandos separados <2,3> no bash. Qual a melhor maneira para fazer isto? No momento, tenho o seguinte script:

command source > output
command2 output &
command3 output &

O arquivo de saída é de aproximadamente 100G e uma maneira abaixo do ideal seria canalizar para os comandos 2 e 3 separadamente. Eu acho que é possível fazer isso de forma ainda mais eficiente.

Responder1

Na festa:command source | tee >(command2) >(command3)

Deessequestão de stackoverflow. Eu não tentei isso com resultados gigantescos.

Responder2

Outras respostas introduzem o conceito. Aqui está uma demonstração real:

$ 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

Claro que você pode, > /dev/nullem vez de out3.

informação relacionada