Estoy haciendo una secuencia de comandos que maneja un conjunto predefinido de datos, la salida a un archivo. Quiero mostrar una advertencia cuando un dato (que siempre es "Regular" en cada conjunto al que he tenido acceso) es diferente, indicando que este valor no se ha manejado (ya que no sé cómo afecta a los datos). ¿Debería enviar esta advertencia a stderr o stdout?¿Debo emitir advertencias a STDERR o STDOUT?
Respuesta
Si guardé la salida de este script (es decir, solo stdout) para poder procesarlo más tarde, ¿esa advertencia interferiría con la forma en que se analiza el resultado? Además, si la salida se canaliza a otro proceso, la advertencia debería aparecer en el terminal, por lo que el usuario lo ve de inmediato.
Por esos motivos, en general, emite advertencias a stderr.
La verdadera pregunta es: si alguien fuera a redirigir la salida de su script a un archivo, ¿le gustaría que la advertencia se coloque en el archivo o se dirija al usuario?
Si espera que el usuario realice alguna acción como resultado de la advertencia, debe dirigirse a STDERR. Si es probable que la advertencia advierta algún script en sentido descendente, debería ir a STDERR.
La advertencia debe ir a stderr.
Además de los puntos presentados por otros (causando errores de análisis para procesos posteriores y ocultando el error del usuario en la consola), existe un problema de flexibilidad.
Si el usuario no desea que la advertencia de stderr vaya a un proceso descendente que está analizando stdout, no tiene que hacer nada especial.
your_script | downstream_process
Si el usuario desea que el aviso de stderr para ir a un proceso descendente que se analizará stdout y stderr, el usuario puede utilizar 2> & 1 para redirigir stderr en la salida estándar.
your_script 2>&1 | downstream_process
, si se imprime ambas advertencias y los datos normales a la salida estándar, el usuario no tiene buena manera de separar las advertencias de los datos sin analizar todo. Por lo tanto, enviar las advertencias a stderr le da a su script más flexibilidad también.
- 1. ¿Debo registrar mensajes en stderr o stdout?
- 2. Guardar stdout, stderr y stdout + stderr sincrónicamente
- 3. Duplicar stdout a stderr
- 4. redirigir subproceso stderr a stdout
- 5. Sobre stdout/stderr redirecciones
- 6. 'app --help' debería ir a stdout o stderr?
- 7. LLVM stdin/stdout/stderr
- 8. Capturando stdout/stderr con NDK
- 9. ¿Por qué se redirige STDERR a STDOUT?
- 10. Enviar JNI C stderr/stdout a log4j
- 11. Redirigir stdout y stderr a la función
- 12. Redireccionando stdout/stderr a varios archivos
- 13. Redirigir bash stdout/stderr a dos lugares?
- 14. Cómo redireccionar stdout, stderr a/dev/tty
- 15. Controlando stdout/stderr desde Jython
- 16. vim filters y stdout/stderr
- 17. Tubería popen stderr y stdout
- 18. paramiko combinar stdout y stderr
- 19. Cómo redirigir el proceso hijo stdout/stderr al proceso principal stdout/stderr en Java?
- 20. Cómo capturar stdout/stderr con googletest?
- 21. stdout y stderr redirección a un único archivo con prefijos
- 22. Redireccionando STDIN, STDOUT, STDERR a/dev/null en C
- 23. cómo controlar popen stdin, stdout, stderr redirection?
- 24. Cómo redirigir STDOUT y STDERR a una variable
- 25. Cómo redirigir stdout y stderr a un archivo
- 26. Bat redireccionando stderr a stdout tiene un comportamiento extraño
- 27. aplicación de inicio, capture stdout y stderr en C++
- 28. Cuándo usar $ stderr vs STDERR en Ruby?
- 29. Escribir STDOUT & STDERR en un archivo de registro, también escribir STDERR en la pantalla
- 30. Uso de corrientes stdout/stderr/stdin detrás de FFI
Entonces, ¿debería ir a stderr independientemente? ¿O pretendía que una de las dos referencias a STDERR fuera STDOUT? –
Quise decir STDERR en ambos. Son dos casos donde prácticamente tiene que enviarlo a stderr. El único momento en el que puedo pensar en querer que termine es cuando el resultado del guión es para consumo humano (quizás va a enviar la salida por correo electrónico a alguien para echarle un vistazo), y es posible que desee que las advertencias sigan la salida sin tener que recordar para redirigir stderr. – Martin