Enviado em 19/03/2011 - 00:05h
Estou usando um comando "wine" e quero usar ferramentas de filtragem para filtrar a saída de erros dele (entre as ferramentas de filtragens, estou usando o sed, grep, cut...)
para passar de uma ferramenta para outra, devo usar o pipe (|), ex:
cut -d " " -f 3 | sed 's/ /\n/g' | sort
Porém o pipe passa o stdout de um comando para o stdin do outro. Porém eu quero filtrar a saída de erros do wine. Assim, para o pipe realizar minhas necessidades, ele teria que passar a stderr do primeiro comando para o stdin do segundo. Para isso eu usei o 2>&1 para passar o erro do wine para a saída padrão.
Ficou um negócio mais ou menos assim:
wine $programa_a_ser_executado 2>&1 | grep err:module:import_dll | cut -d " " -f 3 | sed 's/ /\n/g' | sort | uniq
Depois tentei, ao invés de usar o redirecionador 2>&1, passar o erro do wine para um arquivo, e depois fazer a filtragem desse arquivo, ficou algo assim:
wine $programa_a_ser_executado 2> log.txt
cat log.txt | grep err:module:import_dll | cut -d " " -f 3 | sed 's/ /\n/g' | sort | uniq
Nesse segundo, eu usei duas linhas, passando o erro do wine para um arquivo e filtrando-o com o grep, cut, sed... para obter o erro específico que eu quero.
A pergunta é:
O segundo caso (passando o erro do wine para um arquivo e depois filtrando) saiu bem mais rápido que o primeiro, mesmo ele passando o erro para um arquivo para depois fazer a filtragem. Mas o primeiro caso faz tudo direto (sem passar por arquivo) foi bem lento, comparado ao primeiro, onde o resultado saiu quase que instantaneamente.
Resumindo, ambos fazem a mesma coisa mas um que parece ser um gato mal feito, é o mais rápido.
Espero ter sido o mais claro possível, obrigado.
para passar de uma ferramenta para outra, devo usar o pipe (|), ex:
cut -d " " -f 3 | sed 's/ /\n/g' | sort
Porém o pipe passa o stdout de um comando para o stdin do outro. Porém eu quero filtrar a saída de erros do wine. Assim, para o pipe realizar minhas necessidades, ele teria que passar a stderr do primeiro comando para o stdin do segundo. Para isso eu usei o 2>&1 para passar o erro do wine para a saída padrão.
Ficou um negócio mais ou menos assim:
wine $programa_a_ser_executado 2>&1 | grep err:module:import_dll | cut -d " " -f 3 | sed 's/ /\n/g' | sort | uniq
Depois tentei, ao invés de usar o redirecionador 2>&1, passar o erro do wine para um arquivo, e depois fazer a filtragem desse arquivo, ficou algo assim:
wine $programa_a_ser_executado 2> log.txt
cat log.txt | grep err:module:import_dll | cut -d " " -f 3 | sed 's/ /\n/g' | sort | uniq
Nesse segundo, eu usei duas linhas, passando o erro do wine para um arquivo e filtrando-o com o grep, cut, sed... para obter o erro específico que eu quero.
A pergunta é:
O segundo caso (passando o erro do wine para um arquivo e depois filtrando) saiu bem mais rápido que o primeiro, mesmo ele passando o erro para um arquivo para depois fazer a filtragem. Mas o primeiro caso faz tudo direto (sem passar por arquivo) foi bem lento, comparado ao primeiro, onde o resultado saiu quase que instantaneamente.
Resumindo, ambos fazem a mesma coisa mas um que parece ser um gato mal feito, é o mais rápido.
Espero ter sido o mais claro possível, obrigado.