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: Guilherme Gall
Subject: Re: [shell-script] Dúvida com PIPESTATUS
Date: Mon, 7 Apr 2014 18:20:13 -0300

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
>>  >
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo Grupos
>
>


reply via email to

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