シェルスクリプトでファイルをロックする方法は? [コピー]

シェルスクリプトでファイルをロックする方法は? [コピー]

ファイルロックで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を介した同時ファイルアクセスの意味は...いくら言っても面白いです。

おすすめ記事