Por que um programa chamado sl (stream locomotive) sempre termina com um status de saída "1"?
sl
Animação sl agora em execução...
$ echo $?
1
Por que não status de saída zero?
Posso obter uma explicação? Estou executando em tmux
.
Por que um programa chamado sl (stream locomotive) sempre termina com um status de saída "1"?
sl
Animação sl agora em execução...
$ echo $?
1
Por que não status de saída zero?
Posso obter uma explicação? Estou executando em tmux
.
É um programa de brinquedo, então práticas normais de design não necessariamente se aplicam. Mas é de código aberto e o histórico é público, então você pode olhar a fonte. Depois de encontrar o arquivo e a linha relevantes, dado que o projeto é mantido com o Git, você pode usar
git blame
para descobrir quando essa linha foi modificada pela última vez. O projeto está no GitHub, então você pode usar o botão “Blame” lá.A versão atual (5.03+) do projeto original sempre sai com status 0.
Versões anteriores (até abril de 2017 ) saíam com status 0 se você as compilasse com um compilador C99. Se você as compilasse com um compilador não compatível com C99, elas, na maioria das arquiteturas, normalmente acabariam retornando os 8 bits baixos de qualquer valor retornado da última chamada de função feita de
main
. Ou talvez não — em versões da linguagem C antes de C99, cair do final demain
era comportamento indefinido . Em teoria, comportamento indefinido pode fazer demônios voarem para fora do seu nariz , embora em um ambiente Unix, isso seja limitado pela disponibilidade do dispositivo adequado e pela permissão para acessá-lo. Na prática, na maioria das arquiteturas, o valor de retorno de uma função que retornaint
é colocado em um registrador, então o código de saída do programa seria calculado a partir de qualquer valor que foi escrito por último naquele registrador, que tende a ser o valor retornado pela última chamada de função não nula (mas pode não ser, dependendo de quais são as funções exatas e das otimizações do compilador).Há um fork um tanto proeminente cujo autor decidiu sempre retornar 1 “Porque quando você digita sl você tecnicamente falhou”.