Redireccionar stdout desde dos programas

9

Estoy ejecutando una herramienta de verificación de memoria (prog1) en un código C ++ (prog2), los cuales me dan una salida enorme y detallada. Para perseguir algunos errores, necesito guardar esta salida en un archivo.

Intenté redirigir el stdout a un archivo:

prog1 prog2 > outfile.txt

Pero eso me da un archivo que contiene la salida de prog2, mientras que la salida de prog1 todavía va al terminal.

¿Alguien sabe una manera de especificar que quiero AMBAS salidas para ir a un archivo? Al igual que (prog1 prog2) > outfile.txt?

FJC
fuente

Respuestas:

19

Hay una buena posibilidad de que prog1esté escribiendo su salida a error estándar. Puede redirigir ambas salidas a un solo archivo con

prog1 prog2 > outfile.txt 2>&1

o puedes dividir las salidas con

prog1 prog2 > outfile.txt 2> errors.txt

Esto no separa la salida de los programas individuales , separa los canales de salida. Consulte ¿Cuáles son los operadores de control y redirección de shell? para detalles.

Si observa prog1la documentación de, es posible que encuentre una opción para indicarle que almacene su salida en un archivo con nombre. Por ejemplo, con strace,

strace -o strace.txt prog2 > outfile.txt

almacenaría stracela salida en strace.txt, y todo lo escrito en la salida estándar en outfile.txt.

Stephen Kitt
fuente
55
2>&1tiene que ir después > outfile.txt . El orden de las redirecciones es importante.
Barmar
Nota para futuros lectores: @Barmar tiene toda la razón de que el orden relativo de las redirecciones es importante entre sí. Para aquellos menos familiares, el orden de las redirecciones con respecto a los argumentos del programa solo importa en algunos casos. El principio y el final son ubicaciones comunes, pero el medio ocurre a veces también (por favor, no haga esto). echo >&2 hello worldes equivalente a echo hello world >&2. Más información aquí: tldp.org/LDP/abs/html/io-redirection.html
Morgen