1

私のbashコードは次のようになります:

  set -e
  (
     flock -n 9
     main $@
   ) 9>/var/lock/mylockfile

ただし、現在、ファイルのロックを取得できない場合、エラー メッセージは表示されません。エラーメッセージを表示する方法はありますか?

4

3 に答える 3

2

「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
于 2012-11-06T13:10:05.257 に答える
2

マンページの例は次のように述べています。

(
     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
于 2012-11-06T17:15:05.327 に答える
1

の戻りコードを確認する必要がありますflock -n

 set -e
  (
     flock -n 9
     if [ "$?" -eq 1 ] ; then 
        echo "could not lock"
        exit 1
     fi
     main $@
   ) 9>/var/lock/mylockfile
于 2012-11-06T13:05:32.197 に答える