shell – ¿Cómo redirigir stdout a un archivo y stdout + stderr a otro?

Pregunta:

Como puedo lograr

cmd >> file1 2>&1 1>>file2

Es decir, stdout y stderr deberían redirigir a un archivo (archivo1) y solo stdout (archivo2) deberían redirigir a otro (ambos en modo de anexión).

Respuesta:

El problema es que cuando redirige su salida, ya no está disponible para la siguiente redirección. Puede canalizar a tee en una subcapa para mantener la salida para la segunda redirección:

( cmd | tee -a file2 ) >> file1 2>&1

o si te gusta ver la salida en la terminal:

( cmd | tee -a file2 ) 2>&1 | tee -a file1

Para evitar agregar el stderr del primer tee al file1 , debe redirigir el stderr de su comando a algún descriptor de archivo (por ejemplo, 3), y luego agregarlo a stdout nuevamente:

( 2>&3 cmd | tee -a file2 ) >> file1 3>&1
# or
( 2>&3 cmd | tee -a file2 ) 3>&1 | tee -a file1

(gracias @ fra-san)

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım