Administração de Linux
medium

Administração de Linux Question #019e3987

Question Statement
Administração de Linux
#echo
#dollar-question-mark
#exit-status
#shell-variable
Medium

Quando o comando echo $? retorna 1, qual das seguintes afirmações é verdadeira?

A

É o ID do processo do comando echo.

B

É o ID do processo do shell atual.

C

É o valor de saída do comando executado imediatamente antes do echo.

Correct
D

É o valor de saída do comando echo.

Official Explanation / Community Explanations

O comando echo $? exibe o código de saída do último comando executado. Neste caso, echo $? retorna 1, o que indica que o comando executado imediatamente antes de echo terminou com um status diferente de zero (normalmente indicando um erro). A variável $? é uma variável especial do shell que armazena o código de saída do pipeline em primeiro plano executado mais recentemente.

Como funciona

  • Em Unix/Linux, cada comando retorna um código de saída (inteiro) para o shell ao ser concluído. Por convenção, 0 significa sucesso, e qualquer valor diferente de zero (1-255) indica um erro ou término anormal.
  • O shell armazena esse código de saída na variável $? imediatamente após a conclusão do comando.
  • Executar echo $? imprime o valor de $?, que é o código de saída do comando anterior.

Por que o valor correto está certo

A afirmação "É o valor de saída do comando executado imediatamente antes do echo" está correta porque $? sempre reflete o status de saída do último comando executado. Se o comando anterior falhou (por exemplo, ls /inexistente), $? seria diferente de zero, como 1.

Por que os valores incorretos estão errados

  • "É o ID do processo do comando echo": O ID do processo (PID) de um comando é obtido através de $$ (PID do shell atual) ou $! (PID do último processo em segundo plano), não $?. $? contém o status de saída, não o PID.
  • "É o ID do processo do shell atual": O PID do shell atual é armazenado em $$, não $?. $? não tem relação com IDs de processo.
  • "É o valor de saída do comando echo": O comando echo em si quase sempre é bem-sucedido (código de saída 0), a menos que ocorra um erro de gravação. A saída 1 vem do comando que foi executado antes de echo, não do próprio echo. Depois que echo é executado, $? seria 0 (supondo sucesso), então o valor 1 deve ser de um comando anterior.