有望に見える定型flock(1)
コードを見つけました。盲目的に使用する前に、コンポーネントを理解したいと思います。
これらの関数は 3 番目の形式を使用しているようですflock
群れ [-sxun] [-w タイムアウト] fd
3 番目の形式はシェル スクリプト内で便利で、通常は次のように使用されます。
(
flock -s 200
# ... commands executed under lock ...
) 200>/var/lock/mylockfile
私が迷っている部分(サンプルラッパー関数から)は、この表記法です
eval "exec $LOCKFD>\"$LOCKFILE\""
flock
またはマンページからの略記
200>/var/lock/mylockfile
それは何を達成しますか?
flock
最初のリダイレクトの値以外の値を渡す後続のコマンドflock
が不平を言うことに気付きました
flock: 50: Bad file descriptor
flock
どのファイルを操作するかを知るために、ファイル記述子をマップとして使用しているようです。ただし、それが機能するためには、それらの記述子がまだ存在し、ファイルに関連付けられている必要がありますよね?
リダイレクトが完了し、ロック ファイルが作成された後、ファイルは閉じられ、開いているファイルに関連付けられたファイル記述子は気化されませんか? ファイル記述子は開いているファイルにのみ関連付けられていると思いました。
何が起きてる?