shell-script-pt
[Top][All Lists]
Advanced

[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).




reply via email to

[Prev in Thread] Current Thread [Next in Thread]