使用命令行工具 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."
)
谢谢。
最佳答案
由于圆括号是 shell 语法的一部分,而不是命令本身,因此您必须执行如下操作:
flock -n lockfile.lock bash -c '( command list )'
根据您的确切命令集,必要的引用/转义可能是一个额外的挑战,但如果这变得太难了,那么只需将您的命令放在适当的 shell 脚本中,然后调用它而不是 bash -c ...
语法。
编辑:事实上,以这种方式使用 shell,命令分组不再需要括号(实际上由于生成额外的子 shell 会降低效率),所以这就足够了:
flock -n lockfile.lock bash -c 'command list'
关于Linux shell脚本编程基础 : making a command-line tool that executes a command to execute several,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845817/