我的bash代码看起来像:
set -e
(
flock -n 9
main $@
) 9>/var/lock/mylockfile
但是目前它没有显示任何错误消息,如果它无法锁定文件。 有没有办法显示错误信息?
答案 0 :(得分: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
答案 1 :(得分:1)
联机帮助页中的示例说:
(
flock -n 9 || exit 1
# ... commands executed under lock ...
) 9>/var/lock/mylockfile
即如果鸡群失败就会退出 - 为什么不用它呢? 如果您想显示错误,可以试试这个:
(
# 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
答案 2 :(得分:0)
您应该检查flock -n
set -e
(
flock -n 9
if [ "$?" -eq 1 ] ; then
echo "could not lock"
exit 1
fi
main $@
) 9>/var/lock/mylockfile