在Bash中,我试图使一个函数getLock与不同的锁名一起使用。
function getLock
{
getLock_FILE="${1}"
getLock_OP="${2}"
case "${getLock_OP}" in
"LOCK_UN")
flock -u "${getLock_FILE}"
rm -fr "${getLock_FILE}"
;;
"LOCK_EX")
flock -x "${getLock_FILE}"
esac
}
但是Flock说flock: bad number: myfilelock
我如何才能锁定一个文件,并在我想要的时候释放它,而不必在Flock中执行命令?
它的用法如下:
getLock myfilelock LOCK_EX
somecommands
........
getLock myfilelock LOCK_UN
1条答案
按热度按时间nxagd54h1#
要锁定文件,请执行以下操作:
要释放锁定,请执行以下操作:
您也可以按照Flock手册页中的描述进行操作:
...在这种情况下,当块退出时,文件将自动关闭。(这里也可以使用子外壳,通过使用
( )
而不是{ }
,但这应该是经过深思熟虑的决定--因为子外壳本身有性能损失,以及作用域变量修改和其他状态更改)。如果您运行的是足够新的bash版本,则不需要手动管理文件描述符编号:
...现在,对于您的函数,我们将需要关联数组和自动FD分配(并且,为了允许从不同的路径锁定和解锁相同的文件,GNU Readlink)--因此这不适用于较早的bash版本:
如果您所在的平台上无法使用GNU Readlink,我建议您将
readlink -f
调用替换为sh-realpath by Michael Kropat中的realpath
(仅依赖广泛可用的Readlink功能,而不是GNU扩展)。