A saída de um comando pode ser canalizada para outros dois comandos?

23

Como posso enviar a saída de um comando para a entrada de dois outros comandos simultaneamente?

    
por Richard Hoskins 17.07.2009 / 22:01

2 respostas

51

Parece que o comando tee fará o que você quer.

A chave é usar

>( )

para a substituição de processos . Com tee , use o seguinte padrão:

tee >(proc1) >(proc2) >(proc3) | proc4

Portanto, se você quiser usar a saída de ls como entrada para dois programas grep diferentes, salve a saída de cada grep em arquivos diferentes e canalize todos os resultados por less , tente:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

Os resultados do ls -A serão "canalizados" para ambos os grep s. O arquivo hidden-files terá o conteúdo da saída do primeiro grep e normal-files terá os resultados do segundo grep . Todos os arquivos serão mostrados no pager less . EDITAR : o que você vê em less é a mesma saída exata de ls -A , não o resultado de grep s. Se você quiser 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 de ls -A em vez de substituí-la.

source

    
por 17.07.2009 / 22:15
6

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 redirecionado para o arquivo grepresult).

"Tee" é explicado no artigo da Wikipedia tee (comando) . Central é: "O comando tee lê a entrada padrão, grava seu conteúdo na saída padrão e, simultaneamente, o copia no (s) arquivo (s) ou variáveis especificados.".

    
por 17.07.2009 / 22:19

Tags