Existe um oposto de 'tee' para transmitir vários pipes juntos?

1

Eu tenho vários processos que estão produzindo a saída em STDOUT e STDERR , que eu redirecionei para descritores de arquivos numerados, e quero agrupar todos os resultados em um único arquivo.

Eu tentei ingenuamente

[input processes] | cat <3 <4 <5 2>&1 >[output file]

mas é claro, isso não funciona, pois cat irá esperar até que o STDIN pipe seja fechado antes de ler os dados de qualquer um dos subsequentes, fazendo com que meu processo seja interrompido quando os buffers dos outros pipes ficarem cheios.

Alguma sugestão?

    
por Benjamin 10.05.2017 / 17:01

2 respostas

3

Agrupar os resultados juntos não é realmente o dual de tee . tee faz várias cópias de sua entrada, enquanto a saída de agrupamento não envolve qualquer mesclagem de dados.

Para mesclar as fontes de saída, basta redirecioná-las para o mesmo descritor de arquivo. A intercalação das fontes é um tanto imprevisível em geral, mas gravações suficientemente pequenas em um pipe são garantidos como atômicos . ( Ser capaz de distinguir os limites do lado da leitura é outra história .

{ data_source_1 &
  data_source_2 &
  wait; } >merged_output

Se você estiver recebendo entradas de vários descritores de arquivos e quiser mesclá-los, passe cada um deles.

{ cat <&3 & cat <&4 & wait; } >merged_ouput

Mas normalmente você pode redirecionar todos os descritores de arquivos para o mesmo destino.

… 3>merged_ouput 4>&3
    
por 11.05.2017 / 01:14
0

Você precisa adicionar STDERR e STDOUT ao STDOUT em cada processo.

Exemplo: processA 2>&1 | processB | processC

STDOUT e STDERR seriam redirecionados via o PIPE como o STDIN para processB. No entanto processC só irá obter o STDOUT do ProcessB como STDIN.

Portanto, se você precisar de STDOUT e STDERR de processB como STDIN para processC, seria: %código%

Se você realmente não quer usar pipes, mas quer apenas redirecionar todo o tipo de saída para um único arquivo, você pode fazer:

processA 2>&1 | processB 2>&1 | processC

(processA; processB) >./just_STDOUT.txt

    
por 10.05.2017 / 17:13