我有一个问题,就是在bash中找到锁定文件的好概念,
基本上我想实现以下目标:
使用flock执行此操作似乎不可能,因为文件描述符只会移动一次到文件的末尾。
同样创建Tempfile失败,因为我可能会覆盖已读取的行,这也是不可能的。
编辑:
另请注意,我无法控制的其他脚本可能会尝试写入该文件。
所以我的问题是如何在步骤1中创建一个锁,这样它将跨越2,3,4步直到我在步骤5中再次解锁?
答案 0 :(得分:2)
您可以使用flock
实用程序执行此操作。您只需要flock
使用单独的只读文件描述符,即打开文件两次。例如。使用中间临时文件对文件进行排序:
(
flock -x -w 10 100 || exit 1
tmp=$(mktemp)
sort <"$file" >"$tmp"
cat "$tmp" > "$file"
rm -f "$tmp"
) 100<"$file"
flock
将为您的文件发出flock()
系统调用,如果已被锁定则会阻止。如果超过超时,则脚本将中止并显示错误代码。