Si el mensaje de uso se imprime con, por ejemplo,
command -?
de un comando Unix ir a stderr o stdout, y por qué? ¿Debería ir al mismo lugar si el usuario comete un error con una opción?
Si el mensaje de uso se imprime con, por ejemplo,
command -?
de un comando Unix ir a stderr o stdout, y por qué? ¿Debería ir al mismo lugar si el usuario comete un error con una opción?
touch -- -l; ls -?
realidad obtienes una lista larga como si hubieras pasado-l
a ls.-h
opción para otra cosa que no sea un mensaje de ayuda, entonces'-?'
(con las comillas) o le-:
da una buena oportunidad de recibir un mensaje de error (y uso) desde:
y?
no pueden ser opciones válidas para nada usandogetopt(3)
.Respuestas:
Debería ir a stdout, por lo que puede escribir:
Esto también es recomendado por los Estándares de Codificación Gnu en
--help
.Por otro lado, el mensaje de uso que recibe cuando usa una opción no válida u omite un argumento requerido debe ir a stderr, porque es un mensaje de error y no desea que se alimente al siguiente comando en una tubería.
Cuando lo usa
--help
, el mensaje de uso es el resultado normal y esperado del comando. Por lo tanto, va a stdout, por lo que se puede canalizar a otro comando, comoless
ogrep
.Cuando dices
command --bogus-option | other-command
, no quieres que el mensaje de uso vaya a stdout, porque ahora es una salida inesperada que no debe ser procesada porother-command
. Además, si la salida de--help
es más que un puñado de líneas, entonces el mensaje de error de uso solo debe contener un resumen de la--help
salida y remitir al usuario--help
para obtener detalles adicionales.fuente
--help
es más que unas pocas líneas, entonces el mensaje de uso producido por una opción no válida debería ser solo un breve resumen que dice usar--help
para ver la información completa.