Determine si la salida es stdout o stderr

22

¿Cómo puedo determinar si lo que está produciendo un proceso es stdout o stderr?

Rauffle
fuente

Respuestas:

22

Solo conozco tres formas para determinar qué generará un programa en STDOUT y qué STDERR

  1. Lee la documentación. O

  2. Experimente con la redirección †

  3. imprimir STDERR en rojo

†Por ejemplo:

program > program.stdout 2> program.stderr

Luego mire los dos archivos de salida para ver qué ha escrito el programa en STDOUT y qué ha escrito en STDERR.

En lugar de redireccionar, puede canalizar teesi necesita salida para continuar en la pantalla y en un archivo. Ver /programming//q/692000/477035

RedGrittyBrick
fuente
15
Usualmente uso una variación de la opción 3: program | grep .imprime STDOUT en rojo.
Dennis
Imprimir en rojo es exactamente lo que estaba buscando. Gracias RedGrittyBrick & Dennis
Rauffle
7

Según su solicitud comentada:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
zebediah49
fuente
3
Se ve impresionante. ¿Pero le importaría agregar las cerezas a su árbol y explicar lo que está haciendo? No todo el mundo aquí es un gurú, y su construcción es bastante compleja;)
Izzy
Los soportes son para ordenar. De hecho, obtuve esa forma exacta de I-forget-where, pero el punto es usar descriptores de archivo adicionales (más allá de 1 = stdouty 2 = stderr) para tomar la salida del conjunto interno de corchetes y ejecutar stdoutun sedcomando, mientras stderrpasa uno diferente
zebediah49
Guau. No sabía usar esos descriptores adicionales. Primero estaba un poco confundido (me gusta entender lo que corro, y me confundí un poco con las llaves). Pero ahora está claro, y en mi humilde opinión, exactamente lo que quería el OP. Entonces +1 de mi parte :)
Izzy
Esto me ayudo. Quería agregar más datos en stderr. Esto lo hace y devuelve todo correctamente a stdout / stderr. { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
Bryan Drewery
0

Simplemente puede redirigir stderr a un archivo y si aparece algo en él, es de stderr.

p.ej ls -a 2> ls-all.txt

Si por algún motivo se envió un error a stderr, será redirigido a este archivo.

magna_nz
fuente
-1

Si desea hacer esto una vez, redirija uno de ellos a otro lugar.

Ejemplo, redirigiendo el estándar con >.

ls -al> ls-l.txt (cualquier salida aquí no es de stdout, si ve algo debe ser una salida stderr)

Para el uso de redirección stderr 2>

Hennes
fuente
El proceso crea un flujo constante de salida, algunos para stdout otros para stderr. Quiero determinar cuál es cuál ya que esta salida irá a la pantalla
Rauffle