O status de saída do pipeline Bash difere no script

3

O seguinte pipeline de retorno retorna 1:

$ false | true
$ echo $?
1

No entanto, retorna 0 quando executado em um script:

$ cat test.sh
#!/usr/bin/env bash
false | true
echo $?

$ bash test.sh
0

Alguém por favor pode explicar por quê?

    
por kaligne 04.09.2017 / 18:03

1 resposta

5

O comportamento padrão do bash é retornar o status de saída do último comando no pipeline, como em seu script. Parece que você ativou a opção pipefail no shell interativo que força o retorno do último comando com status de saída diferente de zero. Veja como funciona:

$ set -o pipefail    # enable pipefail
$ false | true
$ echo $?
1

$ set +o pipefail    # disable pipefail
$ false | true
$ echo $?
0
    
por 04.09.2017 / 18:36