49 votos

Es allí una manera de redirigir la salida a un archivo sin búfer en unix/linux?

Tengo una larga ejecución de proceso por lotes que las salidas de algunos de depuración y proceso de la información a stdout. Si sólo tengo que ejecutar desde un terminal puedo seguir la pista de "dónde está", pero después de que los datos se demasiado y se desplaza fuera de la pantalla.

Si me redirigir la salida a un archivo '> out.txt " tengo toda la salida, finalmente, pero es amortiguadas, por lo que no puedo ver lo que está haciendo ahora.

Es allí una manera de redirigir la salida, pero no lo hacen búfer de sus escrituras?

25voto

Calmarius Puntos 121

En Ubuntu, el unbuffer programa (de la expect-dev) paquete hizo el truco para mí. Sólo tiene que ejecutar:

unbuffer your_command

y no búfer.

10voto

Eduardo Ivanec Puntos 7938

Puede establecer explícitamente el almacenamiento en búfer de las opciones de los flujos estándar utilizando un setvbuf llamada en C (ver este enlace), pero si usted está tratando de modificar el comportamiento de un programa ya existente intente stdbuf (parte de la coreutils a partir de la versión 7.5, aparentemente).

Este búferes stdout hasta una línea:

stdbuf -oL command > output

Esto deshabilita stdout de búfer en total:

stdbuf -o0 command > output

9voto

melder Puntos 61

Usted puede alcanzar la línea de salida intermedia a un archivo mediante el uso de la script comando así:

script -q /dev/null batch_process | tee output.log     # Mac OS X, FreeBSD
script -c "batch_process" /dev/null | tee output.log   # Linux

3voto

Paweł Brodacki Puntos 4635

Personalmente prefiero la tubería de salida de un comando quiero examinar a través de la tee.

script registros demasiada información, incluyendo el tiempo de pulsaciones de teclas, y un montón de caracteres no imprimibles. Lo tee salva es mucho más legible para mí.

1voto

Lawrence Puntos 203

Redirigir la salida a un archivo y siga el archivo con el tail -f comando.

Editar

Si esto todavía sufre de almacenamiento en búfer, a continuación, utilizar la facilidad syslog (que es generalmente sin búfer). Si el proceso por lotes se ejecuta como un script de shell, puede utilizar el comando logger para ello. Si el trabajo por lotes se ejecuta en un lenguaje de secuencias de comandos, debe haber un dispositivo de registro de todos modos.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: