0

我目前有一个 bash 脚本,它查看一个文件并将一些数据存储为一个变量......我只希望在文件没有被更新的情况下发生这种情况。

我正在考虑使用类似的东西:

touch "/path/tofile/temp.txt"
while [[ test "/path/tofile/temp.txt" -nt "/path/tofile/readme.txt" ]]
do
echo "readme is still updating"
else? move on???
4

1 回答 1

1

通常的方法是使用临时名称编写文件,并在准备好供其他进程使用时将其重命名为“官方”名称。这样,您就可以避免一大堆问题。即使这看起来工作量很大,你也应该真正考虑一下。

或者,您可以使用锁定文件夹:让更新过程和您的脚本在磁盘上创建一个文件夹。只要文件夹存在,其他进程就在处理该文件,因此当前进程需要等待。缺点:偶尔会发生错误,并且锁定文件夹会一直存在并且您会遇到死锁。

或者您可以使用lsof来查看是否有一个进程打开此文件以进行写入......但这并不意味着当您开始读取文件时此信息仍然正确。

再说一遍:使用临时名称并在准备好时重命名文件。真的。有时其他一切都可能起作用。这真的是你想告诉老板的话吗?

于 2013-10-14T13:55:24.420 回答