Для этой конкретной задачи вы можете использовать sed
вместо head
- или вы можете использовать awk
вместо head
:
some_command | awk '{print} /search_term/{exit}'
Выведите строки, но, если вы найдете строку, соответствующую поисковому запросу, выйдите (и после этого больше не обрабатывайте строки).
Более общее решение проблемы, которую вы описываете:
some_command | tee >(command2) | command3
или же
some_command | tee >(command2) >(command3)
Они будут работать в bash
, но, вероятно, не слишком много других оболочек (включая sh
).
>(command)
дает вам дескриптор файла для канала для command
запуска процесса.
Как вы, вероятно, знаете, tee
позволяет вам брать поток данных и записывать его в нескольких местах.
Но ваша проблема тоньше, чем то, что вы сказали.
Ты не пытаешься сделать
ты пытаешься сделать
где команда head
(соответствующая C
на диаграмме) получает входные данные от « some_command
» (A
), но также имеет аргумент командной строки, установленный из выходных данных awk
(B
).
Я подозреваю, что общее решение для этого было бы намного хитрее.