Sí, muestra un mensaje sobre stderr
cuándo se utilizan los argumentos incorrectos. Y si eso también hace que la aplicación salga, salga con un estado de salida distinto de cero.
Debe usar el flujo de error estándar para los mensajes de diagnóstico o para la interacción del usuario. Los mensajes de diagnóstico incluyen mensajes de error, advertencias y otros mensajes que no forman parte de la salida de la utilidad cuando funciona correctamente ("correctamente", lo que significa que no ocurre nada excepcional, como archivos que no se encuentran o lo que sea).
Muchos shells (¿todos?) Muestran avisos, lo que el usuario escribe y los menús, etc. stderr
para que la redirección stdout
no le impida interactuar con el shell de una manera significativa.
Lo siguiente es de una publicación de blog sobre este tema:
Esta es una cita de Doug McIllroy, inventor de las tuberías Unix, que explica cómo stderr
surgió. 'v6' se refiere a una versión de la versión específica del sistema operativo original de Unix que se lanzó en 1975.
Todos los programas colocaron diagnósticos en la salida estándar. Esto siempre causó problemas cuando la salida se redirigió a un archivo, pero se volvió intolerable cuando la salida se envió a un proceso desprevenido. Sin embargo, no dispuestos a violar la simplicidad del modelo de entrada estándar-salida estándar, la gente toleró este estado de cosas a través de v6. Poco después, Dennis Ritchie cortó el nudo gordiano introduciendo el archivo de error estándar. Eso no fue suficiente. Con las tuberías, el diagnóstico podría provenir de cualquiera de varios programas que se ejecutan simultáneamente. Los diagnósticos necesarios para identificarse.
- Doug McIllroy, "Un lector de UNIX de investigación: Extractos anotados del Manual del programador, 1971-1986"
"Identificarse" significa simplemente decir "¡Hola! ¡Soy yo quien habla! Esto salió mal: [...]":
$ ls nothere
ls: nothere: No such file or directory
Hacer esto stderr
es preferible, ya que de lo contrario podría ser leído por lo que sea que esté leyendo stdout
(pero no hacemos eso de ls
todos modos , ¿ verdad ?).