Como canalizar a saída de um comando para a entrada de outros dois comandos simultaneamente?
Como canalizar a saída de um comando para a entrada de outros dois comandos simultaneamente?
Respostas:
Parece que o tee
comando fará o que você deseja.
A chave é usar
>( )
para substituição de processo . Com tee
, use o seguinte padrão:
tee >(proc1) >(proc2) >(proc3) | proc4
Portanto, se você quiser usar a saída ls
como entrada em dois grep
programas diferentes , salve a saída de cada um grep
em arquivos diferentes e canalize todos os resultados less
, tente:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
Os resultados do ls -A
serão "canalizados" em ambos os grep
s. O arquivo hidden-files
terá o conteúdo da saída do primeiro grep
e normal-files
os resultados do segundo grep
. Todos os arquivos serão mostrados no pager EDIT : o que você vê less
.less
é a mesma saída exata de ls -A
, não o resultado dos grep
s. Se você deseja modificar a saída de ls -A
para less
, (por exemplo, trocando a ordem para que os arquivos normais sejam listados antes dos ocultos), tente o seguinte:
ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less
Sem >/dev/null
, a saída de grep
s seria anexada à saída em ls -A
vez de substituí-la.
Use "tee".
Exemplo:
grep someSearchString someFile | tee /dev/tty | wc -l > grepresult
Isso enviará a saída do comando grep para o terminal e para o wc (cuja saída é, por sua vez, redirecionada para o arquivo grepresult).
"Tee" é explicado no artigo da Wikipedia tee (comando) . O ponto central é: "O comando tee lê a entrada padrão, depois grava seu conteúdo na saída padrão e o copia simultaneamente no (s) arquivo (s) ou variáveis especificados".