PIPESTATUS – Dica Shell Script

August 25th, 2004

Category: Desenvolvimento

Essa dica mostra como recuperar o exit status de cada comando executado em um pipe.


Quando voce executa diversos comandos encadeados em um pipe o return code dado por echo $? reflete apenas o resultado de saida do ultimo comando executado no pipe.
O array PIPESTATUS, por sua vez, armazena em cada elemento o resultado respectivo de cada um dos comandos do pipe. $PIPESTATUS[0] tem o return code do primeiro comando, $PIPESTATUS[1] contem o return code do segundo, e assim por diante.

O exemplo abaixo mostra um script que executa um pipe de 3 comandos, e imprime o return code de cada um dos comandos:

#!/bin/bash
date | grep Wed | wc -l
echo ${PIPESTATUS[*]}

A nao ser que o dia que voce execute este teste seja uma Quarta, o resultado deve ser:

0
0 1 0

O primeiro zero eh a saida do comando wc -l. Na segunda linha temos a impressao do array $PIPESTATUS: 0 (zero) indicando o sucesso do primeiro comando, 1 indicando que o grep falhou ao procurar pela string Wed, e novamente 0 (zero) para o sucesso do comando wc -l.
Voce pode usar individualmente o conteudo de ${PIPESTATUS[0]}, ${PIPESTATUS[1]} e ${PIPESTATUS[n]}.
Entretanto, a utilizacao do array deve ser imediatamente posterior ao pipe, caso contrario o array serah reutilizado. Por exemplo, experimente colocar um echo $? entre o pipe e o comando echo ${PIPESTATUS[*]}.

– hlbog

No comments yet


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>