如何从shell脚本锁定文件?

Itz*_*zie 4 bash shell-script lock flock

我想通过文件锁同步两个 Bash 脚本。这该怎么做?Zsh 有zsystem flock调用,但是 Bash 也可以使用更“shellish”的方法吗?

ilk*_*chu 8

除了锁定文件本身,您还可以创建一个用作锁的文件(锁文件)。有很多实用程序可以用于此,例如procmailhas 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
Run Code Online (Sandbox Code Playgroud)

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

注意:如果您想通过NFS进行锁定,请使用一些为此目的制作的工具。通过 NFS 并发访问文件的语义是……至少可以说很有趣。