redireciona TODAS as saídas do shell para um comando para atuar como filtro

1

Como redirecionar todos os std-output do bash para um comando como 'grep' ou 'sed' para filtrar a saída e depois gravá-la em um arquivo?

Isto é o que eu quero, em princípio: exec > >(cat | cat >>/tmp/myoutput.txt) . O último comando funciona conforme o esperado. Mas se eu substituir o primeiro cat por grep -v 'foo' ou por sed 's/foo/bar/g' , nenhum dado será gravado no arquivo.

Como obter o exemplo acima para trabalhar com o grep ou sed?

Antecedentes: Eu gostaria de filtrar errormessages de .xsession-errors. %código% não está funcionando porque o sed substitui o arquivo .xsession-errors e a saída futura dos programams não é visível. Portanto, uma opção a ser obtida seria substituir uma linha em / etc / X11 / Xsession por um código que filtre mensagens.

Mais informações aqui:

  • usei sed -i 's/foo/bar/g' .xsession-errors 2 vezes para mostrar que os canos estão funcionando como esperado subshell e para rotear everyting em um arquivo. O cat é claro não é necessário na versão final.
  • Eu tive saída suficiente para preencher buffers, eu acho, porque eu fiz vários vezes cat para preencher buffers.)
  • ls /usr/ não está funcionando
por jue 16.01.2016 / 00:53

1 resposta

0

Exemplo:

  1. abre uma bash
  2. chame o comando exec > >(cat | cat >>/tmp/myoutput.txt)
  3. chame outro comando, por exemplo. 'ls -R / usr'
  4. termine o bash com exit
  5. dê uma olhada no arquivo /tmp/myoutput.txt, você verá a saída do comando ls
  6. se você trocar o comando da etapa com este exec > >(sed 's/usr/--HEREAMI--/g' >/tmp/myoutput2.txt)

Isso está funcionando .. no final
Assim, parece que é realmente um problema com o preenchimento de buffers. Vários ls /usr não são suficientes, mas ls -R /usr preenche o buffer. Então agora eu preciso descobrir como evitar o buffer.

(Obrigado por comentar e por pedir um exemplo, isso trouxe a solução.)

    
por 18.01.2016 / 23:54