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 回答