A mensagem de uso impressa com, por exemplo,
command -?
de um comando Unix vá para stderr ou stdout, e por quê? Ele deve ir para o mesmo local se o usuário cometer um erro com uma opção?
A mensagem de uso impressa com, por exemplo,
command -?
de um comando Unix vá para stderr ou stdout, e por quê? Ele deve ir para o mesmo local se o usuário cometer um erro com uma opção?
touch -- -l; ls -?
- você realmente recebe uma lista longa como se tivesse passado-l
para ls.-h
opção para outra coisa que não seja uma mensagem de ajuda, então'-?'
(com as aspas) ou-:
dê uma boa chance de receber uma mensagem de erro (e uso) desde:
e?
não pode ser opções válidas para qualquer coisa usandogetopt(3)
.Respostas:
Ele deve ir para stdout, para que você possa digitar:
Isso também é recomendado pelas normas de codificação
--help
do Gnu .Por outro lado, a mensagem de uso que você recebe ao usar uma opção inválida ou omitir um argumento necessário deve ir para o stderr, porque é uma mensagem de erro, e você não deseja que ela alimente o próximo comando em um pipeline.
Quando você usa
--help
, a mensagem de uso é a saída normal e esperada do comando. Portanto, ele vai para o stdout, para que possa ser canalizado para outro comando, comoless
ougrep
.Quando você diz
command --bogus-option | other-command
, não deseja que a mensagem de uso seja stdout, porque agora é uma saída inesperada que não deve ser processadaother-command
. Além disso, se a saída de--help
for mais do que algumas linhas, a mensagem de erro de uso deve conter apenas um resumo da--help
saída e consultar o usuário--help
para obter detalhes adicionais.fonte
--help
mais de algumas linhas, a mensagem de uso produzida por uma opção inválida deve ser apenas um breve resumo dizendo para usar--help
para ver as informações completas.