BASH地方和羊群(BASH local and flock)

2019-10-20 16:46发布

我尝试使用一群喜欢这里https://stackoverflow.com/a/169969但在函数中...我尝试从羊群部分内更新的局部变量(区域设置的功能),但似乎没有更新...

猫test.sh

#!/bin/bash

function _job_worker()
{
        local z=1
        local result=


        (
                # Wait for lock on /var/lock/.manager.exclusivelock (fd 200)
                flock -x -w 10 200 || return

                z=2
                echo "slot equal $z"

        ) 200>/var/lock/.manager.exclusivelock

        echo "slot equal $z"

}

_job_worker

./test.sh

slot equal 2
slot equal 1

到底我是什么做错了....

Answer 1:

()创建子外壳。 这是一个独立的进程,有它自己的变量和状态 - 它不只是当地人不逃避子shell,但全局变量,文件句柄的变化,当前目录的变化,和(几乎)一切。

使用{} ,而不是创建具有作用域重定向同一个shell中运行,而不是启动子shell块。

那是:

_job_worker() {
        local z=1 result=
        {
                # Wait for lock on /var/lock/.manager.exclusivelock (fd 200)
                flock -x -w 10 200 || return
                z=2
                echo "slot equal $z"
        } 200>.manager.exclusivelock
        echo "slot equal $z"
}

_job_worker


文章来源: BASH local and flock
标签: bash local flock