2009-02-17 4 views
7

Tengo un problema con el inicio de sesión para generar una versión automatizada.Cómo registrar la salida sin almacenamiento en búfer desde stdout y stderr

La compilación se realiza con un archivo MAKE y la utilidad de archivo MAKE.

El problema es que la salida normal como las líneas de comando del compilador van a stdout y los errores de compilación van a stderr.

Quiero obtener el resultado de la construcción como se mostraría en la pantalla. Así que algo como:

(stdout) CC -c file.cpp 
(stderr) Compile error at file.cpp line 232, blah blah blah 
(stdout) CC -c file2.cpp 

Lo que intenté (desde un script ksh) es:

make -k> build.log 2> build.log

Esto resulta en un único archivo de registro, pero el problema es que las secuencias se almacenan en el búfer y, por lo tanto, el resultado en el archivo de registro está mezclado.

Pude capturar la salida en 2 archivos de registro separados, pero luego no tenía información sobre cómo volver a pegarlos en un único archivo de registro.

¿Hay alguna manera de desactivar el almacenamiento en búfer para stdout y stderr en este caso?

Respuesta

22
make -k > build.log 2>&1 

Esto debería funcionar mejor para usted, ya que no está redirigiendo stderr y stdout por separado, pero redirigir stderr a stdout, lo que debería hacer el búfer de sincronización hacia arriba.

Si desea iniciar sesión en un archivo, así como imprimirlo en la consola:

make -k 2>&1 | tee build.log 
+0

Hola Ryan, funciona como un amuleto, pero tengo una pregunta, ¿cómo puedo registrar y ver el mensaje en el momento? Su comando solo registra el mensaje. Gracias –

+1

@LoiDang actualizado para agregar una alternativa que hace un archivo y la consola. –

4

probar este

make -k > build.log 2>&1 
-1

setbuf (stdout, NULL); -> desactiva el almacenamiento en memoria stdout estándar

Cuestiones relacionadas