БАШ местный и стадный
Я пытаюсь использовать стадо, как здесь /questions/6331435/byistryij-i-gryaznyij-sposob-garantirovat-chto-odnovremenno-rabotaet-tolko-odin-ekzemplyar-stsenariya-obolochki/6331457#6331457 но внутри функции... и я пытаюсь обновить локальную переменную (локаль для функции) изнутри части стада, но, похоже, нет Обновить...
кошка 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
какого чёрта я делаю не так....
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