Existe uma orientação oficial POSIX, GNU ou outra orientação sobre onde os relatórios de progresso e as informações de registro (coisas como "Fazendo o foo; o foo feito") devem ser impressos? Pessoalmente, costumo escrevê-los no stderr para poder redirecionar o stdout e obter apenas a saída real do programa. Recentemente me disseram que isso não é uma boa prática, pois os relatórios de progresso não são realmente erros e apenas as mensagens de erro devem ser impressas no stderr.
Ambas as posições fazem sentido e, é claro, você pode escolher uma ou outra, dependendo dos detalhes do que está fazendo, mas eu gostaria de saber se existe um padrão comumente aceito para isso. Não consegui encontrar nenhuma regra específica no POSIX, nos padrões de codificação GNU ou em qualquer outra lista de boas práticas amplamente aceita.
Temos algumas perguntas semelhantes, mas elas não abordam exatamente esse problema:
Quando usar o redirecionamento para stderr em scripts de shell : A resposta aceita sugere o que eu costumo fazer, mantenha a saída final do programa em stdout e qualquer outra coisa em stderr. No entanto, isso é apresentado apenas como uma opinião do usuário, embora apoiada por argumentos.
A mensagem de uso deve ir para stderr ou stdout? : Isso é específico para ajudar mensagens, mas cita o padrão de codificação GNU. Esse é o tipo de coisa que estou procurando, mas não restrito a ajudar apenas as mensagens.
Portanto, existem regras oficiais sobre onde os relatórios de progresso e outras mensagens informativas (que não fazem parte da produção real do programa) devem ser impressos?
stdout
é realmente uma maneira segura e correta de extrair spinners e outras mensagens informativas, mas, como muitos programadores dizem, 'O silêncio é ouro. Não produza nada se estiver tudo bem. Então, na verdade, stderr é sempre usado para fazer isso por causa da definição vaga e também StdOut pode quebrar o tubo sequence.for guia oficial
stderr
para relatar mensagens de erro, exceto quando um --verbose
sinalizador é usado, momento em que os relatórios de progresso também são incluídos.
stdout
juntamente com os resultados, é uma maneira segura de tornar os resultados inúteis. Se você precisar canalizar os resultados para outro programa, esse programa precisará separar os resultados dos giradores. Além disso, se você redirecionar a saída para um arquivo, não poderá ver os giradores. NA MINHA HUMILDE OPINIÃO.