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-la ls.-hopció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, comolessogrep.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--helpes más que un puñado de líneas, entonces el mensaje de error de uso solo debe contener un resumen de la--helpsalida y remitir al usuario--helppara obtener detalles adicionales.fuente
--helpes 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--helppara ver la información completa.