por que não “echo $?” imprime o código de saída do comando antes dele enquanto usado em “&&”?

2

Suponha que eu tenha este programa C simples que retorna 4 para o shell.

int main()
{
  return 4;
}

Quando eu executo, então echo $? , eu recebo 4 , o que é esperado

$ gcc foo.c && ./a.out
$ echo $?
4               <<<< expected

MAS quando eu faço o seguinte, eu não estou recebendo nada

$ gcc foo.c && ./a.out && echo $?
$             <<<< Nothing - WHY????
    
por One Two Three 18.12.2015 / 09:49

1 resposta

5

&& somente executa o segundo argumento se o primeiro tiver sido bem-sucedido, ou seja, se tiver terminado com o código de saída 0. O código de saída 4 significa "falha" para o shell, portanto o echo não será executado. Experimente

gcc foo.c && ./a.out || echo $?

Se você quiser ver o código de saída somente quando não for zero. Se você quiser vê-lo sempre, use

gcc foo.c && ./a.out ; echo $?

Observe que ele pode relatar o código de saída do gcc , se não for zero.

    
por 18.12.2015 / 09:54