私のbashコードは次のようになります:
set -e
(
flock -n 9
main $@
) 9>/var/lock/mylockfile
ただし、現在、ファイルのロックを取得できない場合、エラー メッセージは表示されません。エラーメッセージを表示する方法はありますか?
「set-e」を使用すると、ERR信号を使用できます。bashのマニュアルページで述べたように(オプション「-e」を使用した「set」コマンドの説明):
"A trap on ERR, if set, is executed before the shell exits."
したがって、次のようなことを試すことができます。
set -e
(
trap 'echo flock failed.' ERR
flock -n 9
trap - ERR # reset ERR trap
main $@
) 9>/var/lock/mylockfile
マンページの例は次のように述べています。
(
flock -n 9 || exit 1
# ... commands executed under lock ...
) 9>/var/lock/mylockfile
つまり、flock が失敗した場合に終了します -- なぜそれを使用しないのですか? エラーを表示したい場合は、これを試すことができます:
(
# paranoia: flock may fail with an exit code other than 1,
# eg if it can't be found in $PATH
if flock -n 9 ; then
do_stuff
else
show_error
fi
) 9>$lockfile
の戻りコードを確認する必要がありますflock -n
set -e
(
flock -n 9
if [ "$?" -eq 1 ] ; then
echo "could not lock"
exit 1
fi
main $@
) 9>/var/lock/mylockfile