[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Usando PIPESTATUS
From: |
Andreyev Dias de Melo |
Subject: |
Usando PIPESTATUS |
Date: |
Fri, 27 Aug 2004 08:09:03 -0300 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113 MultiZilla/1.6.3.1c |
Retirado de
http://www.sounerd.com.br/index.php?option=content&task=view&id=152&Itemid=27
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:
date | grep Wed | wc -l
echo ${PIPESTATUS[*]}
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[*]}.
Do man do bash:
PIPESTATUS
An array variable (see Arrays below) containing a list of exit
status values from the processes in the most-recently-executed
foreground pipeline (which may contain only a single command).
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Usando PIPESTATUS,
Andreyev Dias de Melo <=