【问题标题】:Bash- why can't a file be overwritten without the use of a temp file?Bash-为什么不使用临时文件就不能覆盖文件?
【发布时间】:2015-03-16 18:30:42
【问题描述】:

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

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

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

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

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

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

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

所以如果附加一个文件,使用>> 如上所示,工作正常,为什么不能以同样的方式覆盖一个文件。为什么这两个命令如此不同?

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

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

【问题讨论】:

标签: bash overwrite


【解决方案1】:

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

使用 append 时,该命令总是在添加新内容之前遍历整个文件,因此永远不会有部分文件可供读取。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多