【问题标题】:Why doesn't "mycommand >>file1 >>file2" append to both files?为什么“mycommand >>file1 >>file2”不附加到两个文件?
【发布时间】:2017-11-21 04:31:03
【问题描述】:

为什么进入:

    date >> log >> file

进入 BASH 只将日期附加到文件中,不影响日志?

【问题讨论】:

  • 值得注意的是,这并不是 bash 的限制——“stdout”是操作系统级别的构造,是按照惯例预先打开的文件描述符。因此,文件描述符只能引用一个文件的规则不是 bash 的一部分,而是操作系统设计的一部分。 (那个文件可以是一个FIFO,另一端有像tee这样的程序,将每个read拆分成多个writes,但从管道左端的程序的角度来看,它的标准输出是仍然只有一个文件)。
  • bash 可以避免它的唯一方法是位于此类 FIFO 本身的另一端,这会产生严重的副作用——阻止软件直接访问它的任何内容 真正写入(因此如果连接到 TTY 则能够运行 ioctl,如果写入文件则能够四处寻找或检测文件名,否则能够访问大量有用的功能)。

标签: linux bash shell unix io-redirection


【解决方案1】:

因为只有一个stdout。 Bash 允许您多次重定向stdout,但每次重定向都会覆盖前一个重定向,并且所有重定向都在实用程序执行之前进行配置。

重定向stdin 也是如此。 cat < a < b 只会打印b 的内容,原因完全相同。

【讨论】:

    【解决方案2】:

    要补充 Rici 的答案,您可以使用 tee 附加到两个文件:

    date | tee -a log file

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多