命令行工具flock
的示例
文档只定义语法:
flock [options] <file> -c <command>
但-c
似乎不是强制性的。
如果可以锁定文件,则该行执行程序('-n'开关禁用等待锁文件释放):
flock -n lockfile.lck echo "File is Locked"
相反,我希望制作一个类似的脚本:
flock -n $TMP/lockfile.lck (
echo "Congratulations:"
echo "you have acquired the lock of the file"
)
如您所见,它几乎相同,但执行多行 有可能吗?
并且,对于无法锁定的情况:
flock -n lockfile.lck echo "Lock acquired" || echo "Could not acquire lock"
我想知道它是否可以实现如下:
flock -n $TMP/lockfile.lck (
echo "Congratulations:"
echo "you have acquired the lock of the file"
) || (
echo "How sad:"
echo "the file was locked."
)
感谢。
答案 0 :(得分:1)
由于括号中有部分shell语法,而不是自己的命令,你必须这样做:
flock -n lockfile.lock bash -c '( command list )'
根据您的确切命令集,必要的引用/转义可能是一个轻微的额外挑战,但如果这太难了,那么只需将命令放在正确的shell脚本中,然后调用它而不是{ {1}}语法。
编辑:事实上,以这种方式使用shell,命令分组不再需要括号(实际上由于产生了额外的子shell而效率较低),所以这就足够了:
bash -c ...