【问题标题】:Can I combine flock and source?我可以结合群和源吗?
【发布时间】:2014-09-05 21:41:32
【问题描述】:

我想获取一个脚本(它在我的 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 以将锁定命令放入其中。

【问题讨论】:

    标签: bash flock


    【解决方案1】:

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

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

    而且,将flock 传递给source 将不起作用,因为source 需要一个脚本。做你想做的事,你需要通过 fd 锁定。这是一个例子

    #!/bin/bash
    
    exec 9>lockfile
    flock 9
    echo whoopie
    sleep 5
    flock -u 9
    

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

    【讨论】:

      猜你喜欢
      • 2013-08-05
      • 1970-01-01
      • 2016-09-21
      • 2016-07-28
      • 2023-03-19
      • 2013-10-05
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多