2014-09-05 43 views
0

我想采购一个脚本(它设置变量在我的壳):我可以结合鸡群和来源?

source foo.sh args 

但在羊群,这样只有一个实例在同一时间(它做了很多的磁盘访问我”的工作d喜欢确保序列化)。

$ 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

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

  • flock不知道任何命令调用source,因为它的建成bash
  • 即使flock可以运行它,改变不会影响调用shell的状态正如你想用source,因为它发生在一个子进程中。

而且,通过flocksource不会起作用,因为source预计的脚本。要做你想做的事,你需要用fd来锁定。下面是一个示例

#!/bin/bash 

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

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

相关问题