Exibindo resultados 1 até 3 de 3

Tópico: Como capturando erros num pipe

  1. #1
    Desde
    Jan 2006
    Idade
    28
    Posts
    61
    Peso da Avaliação
    8

    Como capturando erros num pipe

    Olá pessoal,

    Andei lendo em livros e pesquisando na net se é possível capturar mensagens de erros ou retornos diferentes de zero numa cadeia de comandos num pipe.
    Exemplo:
    Código:
    terminal:/tmp> cat arquivo_que_nao_existe | awk '{ print $0 }' | sort -u > destino.txt
    cat: cannot open arquivo_que_nao_existe
    terminal:/tmp> echo $?
    0
    terminal:/tmp>
    Se o último comando funcionar então não será possível capturar simplesmente usando $? pois irá conter o retorno do sort -u, que funcionou sem erros.

    Tive alguma idéias para fazer isso de forma indireta, como redirecionar os erros pra um arquivo. Mas nesse caso eu teria que incluir 2>errors.log para cada comando, exemplo:

    Código:
    terminal:/tmp> cat arquivo_que_nao_existe 2>>errors.log | awk '{ print $0 }' 2>>errors.log | sort -u 2>errors.log > destino.txt
    cat: cannot open arquivo_que_nao_existe
    terminal:/tmp> echo $?
    0
    terminal:/tmp>
    Alguém sabe se isso é possível?

    Obrigado!
    Jean

  2. #2
    Desde
    Oct 2001
    Posts
    4.484
    Peso da Avaliação
    26

    Re: Como capturando erros num pipe

    O que você está procurando é essa variável:

    Código:
    ${PIPESTATUS[@]}
    Ela te dá um array com o status de cada comando da cadeia de pipe. Você pode trocar o @ por zero para pegar apenas o errno do primeiro comando, por um para o segundo comando e assim sucessivamente, caso queira testar o resultado de forma individual.

    Substitua o seu echo $? por echo ${PIPESTATUS[@]} e veja que bonito!

    []s, MM

  3. #3
    Desde
    Jan 2006
    Idade
    28
    Posts
    61
    Peso da Avaliação
    8

    Re: Como capturando erros num pipe

    Wow!

    Código:
    term47:/tmp> cat arquivo_que_nao_existe | awk '{ print $0 }' | sort -u > destino.txt
    cat: cannot open arquivo_que_nao_existe
    term47:/tmp> for i in ${PIPESTATUS[@]} ; do echo $i ; done
    2
    0
    0
    placeu1:/tmp>
    Vlw mesmo MM!

    Abraço,
    Jean

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tópicos semelhantes

  1. Como funcionam os exploits
    By placker in forum Penetration Tests
    Respostas: 3
    Último post: 05/12/2008, 18:09
  2. Mudanças de paradigma
    By Guzpido Krush in forum Desenvolvimento seguro
    Respostas: 1
    Último post: 24/11/2006, 15:49
  3. personalizando o windows firewall – SP2
    By J.Augusto in forum Firewall & IDS
    Respostas: 2
    Último post: 05/09/2006, 00:15
  4. Redes
    By Crash in forum Redes & TCP/IP
    Respostas: 7
    Último post: 02/06/2006, 09:28
  5. W32.Sobig.F@mm
    By On-line in forum Malware
    Respostas: 2
    Último post: 05/09/2003, 20:07

Regras de envio

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •