Bash- 为什么不使用临时文件就不能覆盖文件?

Bash- why can't a file be overwritten without the use of a temp file?

覆盖文件的标准过程通常如下:

awk '{print *3}' file > tmp file
tmpFile > file

但是,有时这会有点麻烦,因为在临时文件不再使用后必须将其删除。

那么,为什么不能通过以下方式执行此操作(不需要临时文件):

awk '{print *3}' file > file

我问的原因是因为我知道可以这样追加到文件:

awk '{print *3}' file >> file

因此,如果如上所示使用 >> 附加文件,效果很好,为什么不能以相同的方式覆盖文件。为什么这两个命令如此不同?

此外,是否存在绕过对临时文件的需求的方法(可能以类似于第 2 个摘录的方式),或者第一个摘录是唯一的方法?

注意:awk命令无关紧要,可以用任何其他命令代替

使用临时文件是个好主意,因为您永远无法确定是否会将整个文件读入内存。如果您尝试在它被读取之前写入它,那么您可能会得到与您预期不同的结果。

使用追加时,该命令总是在添加新内容之前遍历整个文件,因此绝不会留下要读取的文件部分。

可能不是一个好主意(尝试读取和写入同一个文件),但如果您坚持这样做,您可以使用 <> 运算符。

gawk '{print *3}' -- <> file