d-_*_*_-b 13 command-line shell lock flock
flock -x -w 5 ~/counter.txt 'COUNTER=$(cat ~/counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Run Code Online (Sandbox Code Playgroud)
我如何将多个命令传递给flock
上面的示例?
据我了解,flock
采用不同的标志(-x 表示独占,-w 表示超时),然后是要锁定的文件,然后是要运行的命令。我不确定如何将两个命令传递给这个函数(用锁定文件的内容设置变量,然后增加这个文件)。
我的目标是通过在每次脚本尝试访问counter.txt
文件时锁定文件来为文件创建一个有点原子的增量。
显式调用 shell。
flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) > ~/counter.txt'
Run Code Online (Sandbox Code Playgroud)
请注意,您更改的任何变量都是该 shell 实例的本地变量。例如,COUNTER
变量不会在调用脚本中更新:您必须从文件中读取它(但它可能在此期间已更改),或作为命令的输出:
new_counter=$(flock -x -w 5 ~/counter.txt sh -c 'COUNTER=$(cat counter.txt); echo $((COUNTER + 1)) | tee ~/counter.txt')
Run Code Online (Sandbox Code Playgroud)