Si le message d'utilisation qui est imprimé avec par exemple
command -?
d'une commande Unix aller à stderr ou stdout, et pourquoi? Doit-il aller au même endroit si l'utilisateur fait une erreur avec une option?
Si le message d'utilisation qui est imprimé avec par exemple
command -?
d'une commande Unix aller à stderr ou stdout, et pourquoi? Doit-il aller au même endroit si l'utilisateur fait une erreur avec une option?
touch -- -l; ls -?
- vous obtenez en fait une longue liste comme si vous étiez passé-l
à ls.-h
option pour autre chose qu'un message d'aide, alors'-?'
(avec les guillemets) ou-:
vous donne une bonne chance d'obtenir un message d'erreur (et d'utilisation) depuis:
et?
ne peut pas être des options valides pour quoi que ce soit en utilisantgetopt(3)
.Réponses:
Il devrait aller à stdout, vous pouvez donc taper:
Ceci est également recommandé par les normes de codage Gnu sur
--help
.D'un autre côté, le message d'utilisation que vous obtenez lorsque vous utilisez une option non valide ou omettez un argument requis doit aller à stderr, car il s'agit d'un message d'erreur et vous ne voulez pas qu'il alimente la commande suivante dans un pipeline.
Lorsque vous utilisez
--help
, le message d'utilisation est la sortie normale et attendue de la commande. Par conséquent, il passe à stdout, il peut donc être redirigé vers une autre commande, commeless
ougrep
.Lorsque vous dites
command --bogus-option | other-command
, vous ne voulez pas que le message d'utilisation soit envoyé à stdout, car c'est maintenant une sortie inattendue qui ne doit pas être traitée parother-command
. De plus, si la sortie de--help
est supérieure à une poignée de lignes, le message d'erreur d'utilisation ne doit contenir qu'un résumé de la--help
sortie et renvoyer l'utilisateur vers--help
pour plus de détails.la source
--help
est supérieure à quelques lignes, le message d'utilisation généré par une option non valide ne doit être qu'un bref résumé indiquant à utiliser--help
pour afficher les informations complètes.