通过 /dev/stdout 进行输出重定向,防止文件被截断

通过 /dev/stdout 进行输出重定向,防止文件被截断

我有一个程序要执行并将其输出收集在文件中。但是,在运行程序时,会打开/dev/stdout(即/proc/self/fd/0)并截断它,这会从累积输出的文件中删除所有内容。

这可以通过一个小的 shell 脚本轻松重现:

sh -c "echo 1; echo 2 > /dev/stdout ; echo 3" >> test.txt

该命令的结果是test.txt包含2and 3(这也在这个答案)。我希望它包含12、 和3

更多信息:

  • 执行的程序不在我的控制之下。我知道如果这样做就不会出现问题>> /dev/stdout,但我无法改变这一点。
  • cat我知道如果我添加这样的:它会起作用... | cat >> test.txt。但是,我更喜欢一个没有额外进程开销的解决方案(这是为了基准测试)。
  • chattr +a test.txt可能是一个解决方案,但需要root。我只是一个普通用户。
  • 我实际上使用容器来执行程序,并且输出重定向是在容器外部配置的。因此,如果有某种解决方案需要对容器进行特定配置,那么这是可能的。
  • 当然,对于写入/dev/stderr或直接使用/proc/self/fd/{0,1}.我正在寻找一个通用的解决方案,只是简化了问题。

总之,我希望有某种方法可以配置重定向或文件描述符或其他方法来防止截断,/proc/self/fd/0即使它指向一个文件。

相关内容