我的bash代码如下所示:
set -e ( flock -n 9 main $@ ) 9>/var/lock/mylockfile
但目前它不显示任何错误消息,如果它是不能得到锁定的文件。有没有办法显示错误消息?
kpbwa7wx1#
通过“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
3zwjbxry2#
手册页中的示例如下:
( 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
jucafojl3#
您应该检查flock -n的返回代码
flock -n
set -e ( flock -n 9 if [ "$?" -eq 1 ] ; then echo "could not lock" exit 1 fi main $@ ) 9>/var/lock/mylockfile
0lvr5msh4#
我的解决方案:
lock="/tmp/name_of_lockfile.lck" echo "Lockfile $lock" exec 200>$lock /usr/bin/flock -n --verbose 200 || exit 1
因此,当运行成功时
Lockfile /tmp/name_of_lockfile.lck flock: getting lock took 0.000006 seconds
而且不成功
Lockfile /tmp/name_of_lockfile.lck flock: failed to get lock
4条答案
按热度按时间kpbwa7wx1#
通过“set -e”,您可以使用ERR信号。正如bash的手册页中所述(带选项“-e”的“set”命令的描述):
因此,您可以尝试以下操作:
3zwjbxry2#
手册页中的示例如下:
例如,如果flock失败,它就会退出--为什么不直接使用它呢?如果你想显示一个错误,你可以试试这个:
jucafojl3#
您应该检查
flock -n
的返回代码0lvr5msh4#
我的解决方案:
因此,当运行成功时
而且不成功