2010-07-09 19 views
18

tengo algunas secuencias de comandos en las que necesito para ver la salida y registrar el resultado a un archivo, con el ejemplo más simple es:¿Cómo registrar la salida en bash y verla en el terminal al mismo tiempo?

$ update-client > my.log 

Quiero ser capaz de ver la salida del comando mientras está ejecutándose, pero también haz que se registre en el archivo. También registro stderr, por lo que me gustaría poder registrar la secuencia de error mientras la veo también.

Respuesta

34
update-client 2>&1 | tee my.log 

2> & 1 redirige error estándar a la salida estándar, y tee envía su entrada estándar a la salida estándar y el archivo.

+1

También puede anexar el archivo de registro, tal como se explica aquí, y lo hacen con otras materias camiseta: http://linux.101hacks.com/unix/tee-command- ejemplos/ – thegeek

4

Simplemente use la cola para ver el archivo a medida que se actualiza. Antecedentes su proceso original añadiendo & después de su comando anterior Después de ejecutar el comando anterior sólo tiene que utilizar

$ tail -f my.log 

Se actualizará continuamente. (tenga en cuenta que no le dirá cuándo el archivo ha terminado de ejecutarse, por lo que puede mostrar algo en el registro para decirle que terminó. Ctrl-c para salir de la cola)

+2

multitud wow difícil en este caso. ¿Qué está mal con esta respuesta? – Cfreak

+2

Es miles de veces peor que usar 'tee' en mi opinión. –

+0

Requiere Ejecutar el proceso en segundo plano –

4

Otra opción es usar la captura de salida basada en bloques desde dentro el guión (no estoy seguro si ese es el término técnico correcto).

Ejemplo

#!/bin/bash 
{ 
    echo "I will be sent to screen and file" 
    ls ~ 
} 2>&1 | tee -a /tmp/logfile.log 

echo "I will be sent to just terminal" 

me gustaría tener más control y flexibilidad - así que prefiero de esta manera.

+0

gracias, esto funcionó perfectamente – wiak

2

Puede utilizar el comando tee para que:

command | tee /path/to/logfile 

El equivelent sin necesidad de escribir a la cáscara sería:

command > /path/to/logfile 

Si desea anexar (>>) y mostrar la salida en la cáscara, utilice la opción -a:

command | tee -a /path/to/logfile 

Tenga en cuenta que la tubería se captura la salida estándar solamente, errores std err no son procesados ​​por la tubería con tee. Si desea registrar errores (de stderr), utilice:

command 2>&1 | tee /path/to/logfile 

Esto significa: orden de marcha y redirigir el flujo stderr (2) a la salida estándar (1). Eso se pasará a la tubería con la aplicación tee.

aprender acerca de esto en el sitio askubuntu

Cuestiones relacionadas