Вопрос: Чтение того же stdin с двумя командами в bash


Я хотел бы передать вывод из двух отдельных команд <2,3> в bash. Каков наилучший способ сделать это? На данный момент у меня есть следующий скрипт:

command source > output
command2 output &
command3 output &

Выходной файл равен ~ 100G, а субоптимальный способ - передавать команды 2 и 3 отдельно. Я бы подумал, что это можно сделать еще более эффективно.


5
2018-02-25 19:30


Источник


Выяснилось, что тройник является возможным способом. Это путь к конкретной задаче? - dr_dom


Ответы:


В bash: command source | tee >(command2) >(command3)

Из это stackoverflow вопрос. Я не пробовал это с ginormous выходами.


9
2018-02-25 20:36



Эта команда не будет работать, к сожалению, поскольку «tee» выгружает копию вывода в файл, а другой - в stdout. (И да, я попробовал это только для того, чтобы убедиться, что это не сработало выше) - davidgo
tee может принимать несколько файлов в качестве аргументов (так выглядят две замены процесса tee). Вы можете перенаправить teeстандартный выход для /dev/null также. - chepner
Вот конкретный пример, который печатает foo три раза: echo foo >(cat) >(cat), Если вы не хотите выводить, вот тот, который печатает foo дважды: echo foo|tee >(cat)|cat, - Stephen Niedzielski


Другие ответы вводят понятие. Вот настоящая демонстрация:

$ 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/null вместо out3.


0
2018-01-22 05:05