Se eu executar diff -q
em dois arquivos e eles forem idênticos, o código de saída gerado echo $?
será 0
; se os arquivos forem diferentes, o código de saída será 1
. Por que é que? De que forma o primeiro é diff
um sucesso e o segundo um fracasso?
Usei os termos “sucesso” e “fracasso” com base em minha leitura e compreensão limitada dehttp://mywiki.wooledge.org/BashGuide/TestsAndConditionals:
- Status de saída
Cada comando resulta em um código de saída sempre que é finalizado.
Este código de saída é usado por qualquer aplicativo que o iniciou para avaliar
se tudo correu bem. Este código de saída é como um valor de retorno de
funções. É um número inteiro entre 0 e 255 (inclusive). A convenção
determina que usemos 0 para denotar sucesso e qualquer outro número para denotar
algum tipo de fracasso.O número específico é inteiramente específico da aplicação,
e é usado para sugerir o que exatamente deu errado.
Eu deveria ter lido man diff
até o fim onde a convenção usada pelos desenvolvedores é clara.
Responder1
De man diff
:
O status de saída é 0 se as entradas forem iguais, 1 se forem diferentes, 2 se houver problema.
Admito francamente que isso pode não sercompletamente padrãomas os códigos de saída sãomais o que você chamaria de "diretrizes" do que regras reais.
Nesse caso, desviar do padrão permite executar diff
scripts facilmente.
diff a b && echo "no difference" || echo "differences!"
Isso é semelhante ao grep
qual sairá 0 se algo for encontrado e 1 se algo não for encontrado. Não consigo explicar a orientação entre 0 e 1 para diff
. Presumo que eles optaram por resultados booleanos padrão C.
Isso realmente não importa. É apenas um número arbitrário.
Responder2
man diff
diga-nos
ESTADO DE SAÍDA
The following exit values shall be returned:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
Chamar os valores de saída de "sucesso" e "falha" é uma escolha autolimitada. Os programas têm 8 bits inteiros para status de saída, valores de 0 a 255.