簡體   English   中英

BASH本地和羊群

[英]BASH local and flock

我嘗試使用像這里https://stackoverflow.com/a/169969這樣的一個群,但是在一個函數中......我嘗試從flock部分更新一個局部變量(locale到函數),但它似乎沒有更新......

貓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

我到底做錯了什么......

()創建一個子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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM