2010-12-16 15 views
8

En Linux, intento redirigir stdout desde una aplicación de consola a un archivo en lugar de a una consola. No tengo el código fuente. Intenté varios métodos, pero todos dieron como resultado un archivo vacío. Sin redirección de salida, todo funciona bien (veo los mensajes de la consola).La redirección de salida no funciona para un determinado programa

he intentado, por ejemplo:

progname > out.txt 
progname > out.txt 2&>1 

Y no se muestra nada en out.txt y en la consola.

He intentado ejecutar la aplicación con strace. Cuando no utilizar la redirección, veo como líneas -

write(1, "bla bla", 8) 

Cuando introduzco redirección de la salida, no hay escritura llama en absoluto, lo que me hace pensar que la aplicación se está probando algo antes de escribir el mensaje. ¿Qué está buscando la aplicación? ¿Cómo puedo eludirlo?

Estoy usando CentOS 5.5 y Bash.

Respuesta

5

Según su nivel, parece que el programa está probando si stdin y/stdout es un tty. Nunca lo he usado, pero podrías intentar usar empty.sourceforge.net. Se supone que debe crear un pseudo-tty que debería engañar al cheque de su programa.

+0

Gracias! funciona - vaciar -f -L out.txt progname – kshahar

9
progname > out.txt 2>&1 

Editar: Si realmente hizo esto y que era un error tipográfico en su pregunta. Es posible que la aplicación compruebe si el resultado es un TTY.

Edit2: Ok, en ese caso, intente script -qc progname > out.txt > 2>&1

En Debian/Ubuntu, script es una parte del paquete bsdutils que es un paquete esencial y siempre instalado.

+0

Correcto, hay un error ortográfico en la pregunta. Pero de todos modos, sé que la aplicación está usando stdout. ¿Cómo puedo capturar el mensaje de salida si comprueba TTY? – kshahar

1

intenta redirigir una sola corriente a la vez a/dev/null, para ver cuál se imprime en:

progname > /dev/null 
progname 2> /dev/null 

Entonces verás las que penetra tienes que capturar. Por razones técnicas, algunos programas imprimen incluso mensajes informativos en stdout.

Cuestiones relacionadas