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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Dúvida com PIPESTATUS


From: Paulo Bettega
Subject: Re: [shell-script] Dúvida com PIPESTATUS
Date: Wed, 09 Apr 2014 11:49:40 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.4.0

Valeu a dica Guilherme, obrigado.
Abraços Paulo Bettega

On 07-04-2014 18:20, Guilherme Gall wrote:
Olá Paulo,

Você pode modificar o comportamento do shell para o $? guardar o
código de retorno do último comando que não retornou retornou zero ao
invés de ser sempre igual ao último índice de PIPESTATUS. Só ativar a
opção pipefail:

$ true | false | true
$ echo $?
0
$ set -o pipefail
$ true | false | true
$ echo $?
1

Em 5 de abril de 2014 03:28, Paulo Bettega <address@hidden> escreveu:
 > Olá Guilherme, vc tem razão, foi essa parte do man bash
 > que eu tinha visto, mas não li até o fim.
 > Fui ler o Array (see Arrays below) pra ver se tinha alguma
 > explicação a mais e não vi o 'single command'.
 >
 > Acho que é o contrário do que eu pensei então, o $? é um tipo
 > de atalho para o último índice do PIPESTATUS.
 > Assim não é necessário saber qual é o último índice,
 > o conteúdo é o mesmo de $?.
 >
 > Abraços Paulo Bettega
 >
 >
 > On 05-04-2014 01:49, Guilherme Gall wrote:
 >> Olá Paulo,
 >>
 >> É isso mesmo que ocorre. O array PIPESTATUS foi atualizado para
 >> guardar o código de retorno de 'echo ${PIPESTATUS[@]}'.
 >>
 >> Não faz muito sentido perguntar se PIPESTATUS guarda os códigos de
 >> retorno "mesmo sem ser em pipe" porque um pipeline pode ser composto
 >> por apenas um comando. Da manpage 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)**.
 >> [...]
 >> ---
 >>
 >> A parte que fala sobre pipelines também cita que pode-se ter apenas um 
comando:
 >>
 >> ---
 >> Pipelines
 >> A pipeline is a sequence of **one or more commands** separated by one
 >> of the control operators | or |&. The format for a pipeline is:
 >>
 >> [time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]
 >>
 >> [...]
 >> ---
 >>
 >> Eu só acho que a parte "separated by one of the control operators | or
 >> |&" é um pouco ambígua. Pode induzir ao pensamento de que se | ou |&
 >> não aparecerem, deixa de ser um pipeline. Não sei se os colegas
 >> concordam. Não hesitem em dizer se estou viajando ;-)
 >>
 >> Atenciosamente,
 >>
 >> Guilherme Gall
 >>
 >> Em 4 de abril de 2014 15:23, Paulo Bettega <address@hidden> escreveu:
 >> > Olá pessoal, minha dúvida é se o PIPESTATUS também guarda o código
 >> > de retorno do último comando executado sozinho, sem ser em pipe.
 >> > (${PIPESTATUS[0]} guarda a mesma coisa que $?)
 >> >
 >> > Estava fazendo esse teste
 >> > ps -u paulo | grep 'não existe' # com ps aux o grep retorna ele próprio
 >> > $ echo ${PIPESTATUS[@]}
 >> > 0 1
 >> > $ echo ${PIPESTATUS[1]}
 >> >
 >> > $
 >> >
 >> > O segundo echo não mostrava o que eu esperava, que era o '1' da
 >> > falha do grep.
 >> > Até que caiu a ficha e vi que o PIPESTATUS estava sendo renovado
 >> > pelo próprio comando 'echo ${PIPESTATUS[@]}' , mesmo sem ser em pipe.
 >> > É isso mesmo que acontece?
 >> >
 >> > Abraços Paulo Bettega
 >> >


reply via email to

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