来源https://plus.google.com/+RandalLSchwartz/posts/QcrqvT3mUdy
#!/bin/sh
(
if ! flock -n -x 200
then
echo "$$ cannot get flock"
exit 0
fi
echo "$$ start"
sleep 10 # real work would be here
echo "$$ end"
) 200< $0
我很难理解这一点。因此,弗洛克声称可以在这里独家访问fd 200,但是什么是()200<0重定向?这是什么意思?
flock
的这种用法使用可执行文件本身($0
)的脚本文件作为其自己的锁定文件。由于除了文件内容之外,文件锁定还基于机制,因此这是可能的。使用<
而不是>
或>>
假设它已经存在并且不需要首先创建;由于脚本通常存在,并且在执行过程中可读(其他任何事情都是病态的),所以这是一个安全的假设。
使用200<
打开$0
进行读取并将其重定向到文件描述符200。在子shell(由大型( ... )
组成)中,flock
命令然后使用此打开文件描述符进行文件锁定。