¿Existe una directriz oficial de POSIX, GNU u otra sobre dónde se deben imprimir los informes de progreso y la información de registro (cosas como "Hacer foo; foo hecho")? Personalmente, tiendo a escribirlos en stderr para poder redirigir stdout y obtener solo la salida real del programa. Recientemente me dijeron que esto no es una buena práctica ya que los informes de progreso no son en realidad errores y solo los mensajes de error deben imprimirse en stderr.
Ambas posiciones tienen sentido y, por supuesto, puede elegir una u otra según los detalles de lo que está haciendo, pero me gustaría saber si hay un estándar comúnmente aceptado para esto. No he podido encontrar ninguna regla específica en POSIX, los estándares de codificación GNU o cualquier otra lista de mejores prácticas ampliamente aceptada.
Tenemos algunas preguntas similares, pero no abordan este problema exacto:
Cuándo usar la redirección a stderr en scripts de shell : la respuesta aceptada sugiere lo que tiendo a hacer, mantener la salida final del programa en stdout y cualquier otra cosa para stderr. Sin embargo, esto solo se presenta como la opinión de un usuario, aunque respaldada por argumentos.
¿Debería el mensaje de uso ir a stderr o stdout? : Esto es específico para mensajes de ayuda, pero cita el estándar de codificación GNU. Este es el tipo de cosas que estoy buscando, pero no se limita a mensajes de ayuda solamente.
Entonces, ¿hay alguna regla oficial sobre dónde deben imprimirse los informes de progreso y otros mensajes informativos (que no son parte del resultado real del programa)?
stdout
es en realidad una forma segura y correcta de lanzar hilanderos y otros mensajes informativos, pero como muchos programadores dicen 'El silencio es dorado. No emite nada si todo está bien. de hecho, stderr siempre se usa para hacer eso debido a la definición vaga y también stdout puede romper la secuencia de la tubería. para guía oficial
stderr
para informar mensajes de error, excepto cuando --verbose
se usa un indicador, en cuyo punto también se incluyen informes de progreso.
stdout
junto con los resultados es una forma segura de hacer que los resultados sean inútiles. Si alguna vez necesita canalizar los resultados a otro programa, dicho programa necesitaría separar los resultados de los hilanderos. Además, si redirige la salida a un archivo, no podrá ver los hilanderos. EN MI HUMILDE OPINIÓN.