Leyendo el mismo stdin con dos comandos en bash

Leyendo el mismo stdin con dos comandos en bash

Me gustaría canalizar una salida a dos comandos separados <2,3> en bash. Cual es la mejor manera de hacer esto? Por el momento, tengo el siguiente script:

command source > output
command2 output &
command3 output &

El archivo de salida es ~100G y una forma subóptima sería canalizar los comandos 2 y 3 por separado. Creo que es posible hacerlo aún más eficientemente.

Respuesta1

En fiesta:command source | tee >(command2) >(command3)

Deestepregunta de desbordamiento de pila. No he probado esto con resultados descomunales.

Respuesta2

Otras respuestas introducen el concepto. Aquí hay una demostración 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

Por supuesto que puedes > /dev/nullen lugar de out3.

información relacionada