ファイルロックを介して2つのBashスクリプトを同期したいと思います。これを行う方法? Zshにはzsystem flock
呼び出しですが、Bashでも使用できる「シェルっぽい」メソッドはありますか?
ファイル自体をロックする以外に、ロックとして使用されるファイル(lockfile)を作成できます。このためのユーティリティがたくさんあります。 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 [〜#〜]、その目的のために作成されたツールを使用します。 NFSを介したファイルへの同時アクセスのセマンティクスは...控えめに言っても興味深いです。