如何从 shell 脚本锁定文件?

如何从 shell 脚本锁定文件?

我想通过文件锁同步两个 Bash 脚本。这个怎么做? Zsh 有zsystem flockcall,但是有没有一种更“shellish”的方法也可用于 Bash?

答案1

除了锁定文件本身之外,您还可以创建一个用作锁的文件(锁定文件)。procmail有很多实用程序可以实现此目的,例如lockfile,在 Debian 中,该liblockfile-bin软件包具有dotlockfile. Procmail 应该足够通用,可以在大多数系统上使用。

但基本上可以归结为:

tempfile=$(mktemp ./lock.XXXX)
lockfile=./lockfile
if ln $tempfile $lockfile ; then
    echo got it
    # do something
    rm $lockfile # after you're done
else 
    echo did not succeed
fi
rm $tempfile

ln如果目标已经存在,则不会破坏目标,与类似的东西不同echo > file,相反,您会收到一个可以检查的错误。

笔记:如果你想加锁网络文件系统,使用为此目的制作的一些工具。通过 NFS 并发访问文件的语义……至少可以说很有趣。

相关内容