O último comando no pipe.
$ false | echo -n
$ echo $?
0
$ true | echo -n
$ echo $?
0
$ true | echo -n | false
$ echo $?
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 -
?
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.
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]}
.
Tags bash