1

我想知道是否有人可以指出我处理输出限制如何在 bash 中工作的低(ish)级别机制的资源。不幸的是,我只能打开基本“>将输出发送到文件”指南的页面和页面,但似乎没有比这更详细的了。

特别是,我面临一个奇怪的情况,即在 Cygwin 上使用附加重定向器 (>>) 有时似乎会从文件的开头开始覆盖目标,而不是按预期从末尾追加。我不知道可以从 bash 给出的任何命令组合故意执行此操作,但我想更好地了解如何实际处理 reidrection,以便尝试调试此行为并找出可能是什么造成它。

实际输出来自一个 Java 程序,该程序通过 System.out.println() 输出简单的进度消息,以防万一我不知道这里可能有问题

4

1 回答 1

3

我不知道这是否是它在 Cygwin 中的工作方式,但通常这种事情使用:

  1. fork创建一个新进程。
  2. open打开重定向文件。
  3. dup2使 STDIN、STDOUT 或 STDERR 与打开的文件相同。
  4. exec运行指定的命令,现在重定向流。

">" 和 ">>" 之间的区别通常通过给open命令赋予不同的标志来处理;对于“>”,文件仅被打开,而对于“>>”,文件以附加模式(O_APPEND)打开。

我怀疑 Cygwin 是否对原始 BASH 源代码进行了任何重大更改,因此我怀疑您遇到的情况可能与 Cygwin 在 WIN32 上实现这些 UNIX 功能有关。

于 2009-07-20T16:48:52.487 回答