Captura toda a saída, erro, aviso e sua ordem de aparecimento do comando do linux

2

No linux podemos redirecionar stdout e stderr ou ambos para arquivos. Por exemplo:

  • Redireciona stdout e stderr para dois arquivos: command 1>out 2>err . Desta forma, podemos separar a saída e o erro em dois arquivos de diferença.
  • Redireciona stdout e stderr para arquivos: command &>all . Desta forma, podemos capturar as ordens de aparência de saída e mensagem de erro.

Eu quero combinar os dois comandos acima: command 1>out 2>err &>all , para capturar a ordem de aparecimento da saída e do erro e separar a saída e o erro. Mas o comando acima não funciona, os arquivos out e err estão vazios. Se eu inverter a ordem, o arquivo all estará vazio. Então, existe alguma maneira de combinar os dois comandos acima como eu quero?

    
por Waveter 12.07.2016 / 09:39

1 resposta

1

Em bash , é um pouco complicado:

command 2> >(tee err) 1> >(tee out) | tee >all

Aqui, precisamos da substituição de processos >(...) e tee para contornar o problema . Com a substituição do processo, o processo tee é anexado ao canal correspondente. tee , em seguida, grava as linhas no arquivo e imprime então no STDOUT . Portanto, depois de gravar nos arquivos, STDERR e STDOUT serão impressos em STDOUT . Em bash , não podemos usar vários redirecionamentos do mesmo canal em um comando. É por isso que precisamos canalizar essa saída para tee novamente, que então apenas imprime.

Dentro de zsh (observe que a opção MULTIOS deve ser definida, que é detida em zsh ):

command >out 2>err &>all
    
por 12.07.2016 / 11:03