来自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
我有理解这个问题。所以flock声称在这里可以访问fd 200, 但是什么是()200&lt; $ 0重定向?这是什么意思?
答案 0 :(得分:2)
flock
的这种用法使用可执行文件本身的脚本文件($0
)作为自己的锁定文件。由于文件锁定基于的机制文件的内容,因此这是可能的。使用<
代替>
或>>
假设它已经存在且不需要先创建;因为脚本通常存在并且在执行期间是可读的(其他任何事情都是病态的),这是一个安全的假设。
使用200<
打开$0
进行读取并将其重定向到文件描述符200.在子shell(由大( ... )
形成)中flock
命令然后使用此开放文件锁定的文件描述符。