在Linux上,我正在尝试将stdout从控制台应用程序重定向到文件而不是控制台。我没有源代码。我尝试了几种方法,但都导致了一个空文件。没有输出重定向,一切正常(我看到控制台消息)。
我试过,例如:
progname > out.txt
progname > out.txt 2&>1
out.txt和控制台中没有任何内容。
我尝试用strace运行应用程序。当我不使用重定向时,我会看到诸如 -
之类的行write(1, "bla bla", 8)
当我引入输出重定向时,根本没有写入调用,这让我觉得应用程序在编写消息之前正在测试某些东西。应用程序在寻找什么?我怎么能绕过它?
我正在使用CentOS 5.5和Bash。
答案 0 :(得分:9)
progname > out.txt 2>&1
编辑:如果您确实这样做了,那么这是您提问中的拼写错误。应用程序可能会检查输出是否为TTY。
编辑2:好的,在这种情况下,请尝试script -qc progname > out.txt > 2>&1
在Debian / Ubuntu中,script
是bsdutils
包的一部分,它是Essential包并且始终安装。
答案 1 :(得分:7)
基于你的strace,听起来像程序正在测试stdin和/我们的stdout是否是tty。我从来没有使用它,但你可以尝试使用empty.sourceforge.net。它假设创建一个伪tty,它应该欺骗你的程序检查。
答案 2 :(得分:2)
尝试将一个流一次重定向到/ dev / null,以查看它打印的是哪个:
progname > /dev/null
progname 2> /dev/null
然后您将看到必须捕获的流。由于技术原因,某些程序甚至在stdout上打印信息性消息。