Bash 猛击本地和羊群

Bash 猛击本地和羊群,bash,local,flock,Bash,Local,Flock,我试着使用像这里这样的羊群 但在一个函数中。。。我试图从flock部分中更新局部变量(函数的区域设置),但似乎没有更新 cat test.sh /test.sh 我到底做错了什么…(和)创建子shell。这是一个独立的过程,它有自己的变量和状态——不只是局部变量不转义子shell,而是全局变量、文件处理更改、当前目录更改和(几乎)其他所有内容 使用{和}创建一个块,该块的作用域重定向在同一个shell中运行,而不是启动子shell 即: _job_worker() { local

我试着使用像这里这样的羊群 但在一个函数中。。。我试图从flock部分中更新局部变量(函数的区域设置),但似乎没有更新

cat test.sh /test.sh 我到底做错了什么…

创建子shell。这是一个独立的过程,它有自己的变量和状态——不只是局部变量不转义子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

仅供参考,您不需要
函数
关键字——它会使您的脚本与POSIX sh不兼容,但这样做不会带来任何好处。您是对的,感谢您指出这一点!当然,使用
local
也会使代码与POSIX不兼容,但至少会增加一些价值。
slot equal 2
slot equal 1
_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