重定向不起作用

时间:2011-11-04 02:38:21

标签: shell ubuntu io-redirection

我想将程序的输出放入文件中。我键入了以下内容:

./prog > log 2>&1

“log”文件中没有任何内容。我使用的是Ubuntu 11.10,默认的shell是bash。

有人知道这个的原因以及我如何调试它?

1 个答案:

答案 0 :(得分:3)

有很多可能的原因:

  • 当您尝试通过截断重定向到log文件时,程序会读取fflush文件的输入(请参阅Why doesn't "sort file1 > file1" work?
  • 输出被缓冲,因此在刷新输出缓冲区之前,您不会看到文件中的数据。如果使用C ++ I / O流等,您可以手动调用std::flush或输出gdb
  • 如果输出流不是终端,程序足够智能并禁用输出。
  • 您查看错误的文件(即在另一个目录中)。
  • 您尝试错误地转储文件内容。
  • 您的程序输出'\ 0'作为第一个字符,因此输出显示为空,即使有一些数据。
  • 为您自己命名。

最好的办法是在调试器下运行此应用程序(如strace)或使用ptrace或{{1}}(或两者),看看程序在做什么。我的意思是,真的,输出重定向工作的最后一次像40年一样,所以问题必须在其他地方。