重定向不起作用

发布于 2024-12-13 14:51:15 字数 191 浏览 1 评论 0原文

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

./prog > log 2>&1

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

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

I want to put my program's output into a file. I keyed in the following :

./prog > log 2>&1

But there is nothing in the file "log". I am using the Ubuntu 11.10 and the default shell is bash.

Anybody know the cause of this AND how I can debug this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

随梦而飞# 2024-12-20 14:51:15

可能的原因有很多:

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

最好的选择是在调试器(例如 gdb)下运行此应用程序或使用 strace 或 ptrace(或两者)并查看程序的内容正在做。我的意思是,实际上,输出重定向在过去 40 年里一直有效,所以问题一定出在其他地方。

There are many possible causes:

  • The program reads the input from log file while you try to redirect into it with truncation (see Why doesn't "sort file1 > file1" work?)
  • The output is buffered so that you don't see data in the file until the output buffer is flushed. You can manually call fflush or output std::flush if using C++ I/O stream etc.
  • The program is smart enough and disables output if the output stream is not a terminal.
  • You look at the wrong file (i.e. in another directory).
  • You try to dump file's contents incorrectly.
  • Your program outputs '\0' as the first character so the output appears to be empty, even though there is some data.
  • Name your own.

Your best bet is to run this application under a debugger (like gdb) or use strace or ptrace (or both) and see what the program is doing. I mean, really, output redirection works for the last like 40 years, so the problem must be somewhere else.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文