读取文件然后将内容写入同一文件的最快/最优雅的方法是什么?
在Linux上,这并不总是与“触摸”文件相同,例如,如果文件代表某个硬件设备。
对我echo $(cat $file) > $file有用的一种可能性是,但我想知道这是否是最佳实践。
我明白你对简单的事情不感兴趣touch $file感兴趣,而是对文件的转换形式感兴趣。
由于文件的转换可能会导致其暂时损坏,因此在其他人可能同时读取它的同时将其放置到位并不好。
因为该临时文件是您的最佳选择,并且只有在转换文件时才应该一步替换该文件:
cat "$file" | process >"$file.$$"
mv "$file.$$" "$file"
Run Code Online (Sandbox Code Playgroud)
这是最安全的一组操作。
当然我省略了“检查文件是否真的存在”之类的操作,留给你吧。
通常无法一步一步完成此操作,因为写入文件可能会干扰从文件中读取数据。如果您在常规文件上尝试此操作,则>重定向很可能在读取任何内容之前将文件清空。
您最安全的选择是将其分为两个步骤。如果需要,可以将其隐藏在函数调用后。
rewrite() {
local file=$1
local contents=$(< "$file")
cat <<< "$contents" > "$file"
}
...
rewrite /sys/misc/whatever
Run Code Online (Sandbox Code Playgroud)
moreutils 包中的海绵实用程序允许这样做
~$ cat file
foo
~$ cat file | sponge file
~$ cat file
foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2490 次 |
| 最近记录: |