flockコマンドをflock関数みたいに使う - 揮発性のメモ
リダイレクトでファイルディスクリプタを指定するとき、番号を直接指定しているのがいやだったけど、
変数名を指定することで自動で空いている番号を使用してくれることがわかった
参考:本を読む execによるリダイレクトで番号を自動で割り振る
※ただしbashでしか使えない技
#!/bin/bash # ロック (ロックファイル名) filelock () { exec {LOCKFD}>$1 flock -x $LOCKFD } # アンロック fileunlock () { exec {LOCKFD}>&- } echo "HEAVEN OR HELL" filelock /tmp/hoge echo "LET'S LOCK" sleep 10 echo "SLASH" fileunlock sleep 5
ロック解除するときロックファイルを消してはいけない
Stray Penguin - Linux Memo (BASH)
fileunlock() { # Release flock. Argument: lockfile path. exec 9<&- rm -f $1 }
これはバグです。
ファイルを消してしまうと、次にロックするときに作るロックファイルは同名だけど別ファイルなので、ロック取得できてしまいます。