假设我有一些通过管道传输到文件的进程:
yes > foo
我现在想要清除/清空文件foo
,但仍然希望进程写入文件,即清除后再次开始填充文件。
这可能吗?
答案1
yes >> foo
单独使用yes > foo
and:>foo
来清除文件
yes >> foo
原因read
打开foo
与O_APPEND
。这会导致文件偏移量在每次写入之前定位在文件末尾。
因此yes
写入文件foo
,每次写入都会导致文件指针位于foo
.同时: > foo
将文件截断为 0 字节。现在,由于引起的yes
文件指针重新定位在零字节的“末尾” ,下一次写入将从零字节的开头重新开始foo
O_APPEND
foo
答案2
如果你这样做yes > foo
并再次这样做,它做第一次执行后删除文件 foo 中的所有内容...
您可以使用下列方法之一:
rm foo
yes > foo
> foo
yes > foo
echo "" > foo
yes > foo