ファイルロックで2つのBashスクリプトを同期させたい。どうすればいいですか? Zshにはzsystem flock
呼び出しがありますが、Bashでも動作するもう少し「シェルのような」アプローチはありますか?
答え1
ファイル自体をロックすることに加えて、ロックとして機能するファイル(ロックファイル)を作成できます。procmail
これを達成するために、次のような多くのユーティリティがあります。lockfile
, Debian では、このliblockfile-bin
パッケージはdotlockfile
ほとんどのシステムで使用できるほど一般的です。
ただし、基本的には次のように要約されます。
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を介した同時ファイルアクセスの意味は...いくら言っても面白いです。