传递多个命令到flock

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文件时锁定文件来为文件创建一个有点原子的增量。

Gil*_*il' 6

显式调用 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)