如何清除/清空正在通过管道传输到的文件?

如何清除/清空正在通过管道传输到的文件?

假设我有一些通过管道传输到文件的进程:

yes > foo

我现在想要清除/清空文件foo,但仍然希望进程写入文件,即清除后再次开始填充文件。

这可能吗?

答案1

yes >> foo单独使用yes > fooand:>foo来清除文件

yes >> foo原因read打开fooO_APPEND。这会导致文件偏移量在每次写入之前定位在文件末尾。

因此yes写入文件foo,每次写入都会导致文件指针位于foo.同时: > foo将文件截断为 0 字节。现在,由于引起的yes文件指针重新定位在零字节的“末尾” ,下一次写入将从零字节的开头重新开始fooO_APPENDfoo

答案2

如果你这样做yes > foo并再次这样做,它第一次执行后删除文件 foo 中的所有内容...

您可以使用下列方法之一:

rm foo
yes > foo

> foo
yes > foo

echo "" > foo
yes > foo

相关内容