我可以结合鸡群和来源吗?

时间:2014-09-05 21:41:32

标签: bash flock

我想要一个脚本(它在我的shell中设置变量):

source foo.sh args

但是在flock下,所以一次只能运行一个实例(它会执行大量的磁盘访问,我希望确保序列化)。

$ source flock lockfile foo.sh args
-bash: source: /usr/bin/flock: cannot execute binary file

$ flock lockfile source foo.sh args
flock: source: Success

不起作用。

我缺少一些简单的语法吗?假设我无法编辑foo.sh以将锁定命令放入其中。

1 个答案:

答案 0 :(得分:1)

您不能通过source直接flock脚本,因为它是一个外部命令,而source是内置的shell。实际上你有两个问题:

  • flock并不知道任何名为source的命令,因为它内置于bash
  • 即使flock可以运行它,更改也不会影响调用shell的状态,因为它需要source因为它在子进程中发生。

而且,将flock传递给source会失败,因为source需要一个脚本。要做你想做的事,你需要用fd锁定。这是一个例子

#!/bin/bash

exec 9>lockfile
flock 9
echo whoopie
sleep 5
flock -u 9

同时在同一目录中运行此脚本的两个实例,您将看到一个等待另一个。