Sair do valor com comandos canalizados no bash

1

Sempre que a saída de um comando é canalizada para outra em bash, qual comando o valor de saída (a variável $? ) será retornado? O comando do qual a saída foi canalizada ou o comando para o qual a saída foi canalizada?

Digamos, por exemplo, no comando:

git diff | vim -

A variável $? seria proveniente do comando git diff ou do comando vim - ?

    
por Wuffers 09.05.2011 / 00:46

3 respostas

5

O último comando no pipe.

$ false | echo -n
$ echo $?
0

$ true | echo -n
$ echo $?
0

$ true | echo -n | false
$ echo $?
1
    
por 09.05.2011 / 01:03
5

man bash diz:

   ?      Expands to the exit status of the most recently  executed  fore‐
          ground pipeline.

E:

   The return status of a pipeline is the exit status of the last command,
   unless the pipefail option is enabled.
    
por 09.05.2011 / 01:04
1

O $? mantém o status do último comando executado em um pipeline, mas se você quiser verificar o status de um comando dentro do pipeline, use a variável PIPESTATUS , que é

An array variable (see Arrays) containing a list of exit status values from the processes in the most-recently-executed foreground pipeline (which may contain only a single command).

No seu exemplo, o status de retorno de git diff pode ser lido em ${PIPESTATUS[0]} .

    
por 10.05.2011 / 08:41

Tags