读取文件然后将内容写入同一文件的最快/最优雅方式是什么?
在Linux上,这并不总是与触摸'一个文件,例如如果文件代表某些硬件设备。
对我有用的一种可能性是echo $(cat $file) > $file
,但我想知道这是否是最佳做法。
答案 0 :(得分:3)
您不能一步完成此操作,因为写入文件会干扰从中读取。如果您在常规文件上尝试此操作,则>
重定向可能会在读取任何内容之前将文件清空。
你最安全的选择是分成两步。如果需要,可以将其隐藏在函数调用后面。
rewrite() {
local file=$1
local contents=$(< "$file")
cat <<< "$contents" > "$file"
}
...
rewrite /sys/misc/whatever
答案 1 :(得分:3)
moreutils package中的海绵实用程序允许此
~$ cat file
foo
~$ cat file | sponge file
~$ cat file
foo
答案 2 :(得分:1)
我理解您不对简单touch $file
感兴趣,而是对文件进行转换。
由于文件的转换可能会导致其暂时损坏,因此将其设置到位是不好的,而其他人可能会在同一时刻阅读它。
由于该临时文件是您的最佳选择,并且只有在您转换文件时,您应该只需一步替换该文件:
cat "$file" | process >"$file.$$"
mv "$file.$$" "$file"
这是最安全的操作。
当然我省略了像&#39;检查文件是否真的存在的操作&#39;等等,留给你。