Sim, exiba uma mensagem stderr
quando os argumentos errados forem usados. E se isso também fizer com que o aplicativo saia, saia com um status de saída diferente de zero.
Você deve usar o fluxo de erros padrão para mensagens de diagnóstico ou para interação do usuário. As mensagens de diagnóstico incluem mensagens de erro, avisos e outras mensagens que não fazem parte da saída do utilitário quando estão funcionando corretamente ("corretamente" significa que não há nada de excepcional acontecendo, como arquivos não encontrados ou o que quer que seja).
Muitos shells (todos?) Exibem avisos, o que o usuário digita, menus etc., stderr
para que o redirecionamento stdout
não o impeça de interagir com o shell de maneira significativa.
O seguinte é de uma postagem de blog sobre este tópico:
Esta é uma citação de Doug McIllroy, inventor de pipes Unix, explicando como stderr
surgiu. 'v6' está se referindo a uma versão da versão específica do sistema operacional Unix original, lançada em 1975.
Todos os programas colocaram diagnósticos na saída padrão. Isso sempre causava problemas quando a saída era redirecionada para um arquivo, mas tornava-se intolerável quando a saída era enviada para um processo desavisado. No entanto, não querendo violar a simplicidade do modelo de entrada-padrão-saída-padrão, as pessoas toleraram esse estado de coisas através da v6. Pouco tempo depois, Dennis Ritchie cortou o nó górdio, introduzindo o arquivo de erro padrão. Isso não foi o bastante. Com os pipelines, o diagnóstico pode vir de qualquer um dos vários programas em execução simultaneamente. Diagnóstico necessário para se identificar.
- Doug McIllroy, "Um leitor UNIX de pesquisa: trechos anotados do manual do programador, 1971-1986"
"Identificar-se" significa simplesmente dizer "Ei! Sou eu falando! Isso deu errado: [...]":
$ ls nothere
ls: nothere: No such file or directory
stderr
É preferível fazer isso , pois de outra forma poderia ser lido pelo que estava lendo stdout
(mas não fazemos isso de ls
qualquer maneira , não é?).