Para essa tarefa específica, você pode usar sed
em vez de head
- ou você pode usar awk
em vez de head
:
some_command | awk '{print} /search_term/{exit}'
Imprima linhas, mas, quando encontrar uma que corresponda ao termo de pesquisa, saia (e não processe mais linhas depois disso).
Uma solução mais geral para o problema que você descreve é
some_command | tee >(command2) | command3
ou
some_command | tee >(command2) >(command3)
Estes funcionarão em bash
, mas provavelmente não em muitos outros shells (incluindo sh
).
>(command)
fornece um identificador de arquivo para um canal para um processo executando command
.
Como você provavelmente sabe, tee
permite pegar um fluxo de dados e gravá-lo em vários lugares.
Mas o seu problema é mais delicado do que o que você disse. Você não está tentando fazer
vocêestátentandofazer
em que o comando head
(corresponde a C
no diagrama)
recebe entrada de " some_command
" ( A
)
mas também tem um argumento de linha de comando definido a partir da saída de awk
( B
).
Eu suspeito que uma solução geral para isso seria muito mais difícil.