在后台运行命令并稍后捕获结果 (Bash)



与这些问题(1((2(类似,我想在后台进程中运行一个命令,继续处理,然后使用该命令的返回值。

我的脚本中有一个函数需要特别长的时间,所以我想在设置的其余部分之前先运行它,以便在给出该脚本的返回值时减少延迟,但目前返回值没有被捕获。

我尝试过:

if [ $LAZY_LOAD -eq 0 ]; then
echo "INFO - Getting least loaded server in background. Can take up to 30s."
local leastLoaded=$( getLeastLoaded ) &
fi
# Other setup stuff that doesn't use leastLoaded...
# setup setup setup....
if [ $LAZY_LOAD -eq 0 ]; then
echo "INFO - Waiting for least loaded server to be retrieved before continuing"
wait
fi
echo "INFO - Doing stuff with $leastLoaded."
doThingWithLeastLoaded $leastLoaded

getMinimumLoaded绝对可以在没有&的情况下工作,所以我确定这是一个并发问题。

谢谢!

根据 bash 手册:

如果命令被控制运算符终止&,shell 会在后台的子 shell 中执行该命令。

因此,您的local命令不会影响当前的外壳。

我会这样建议:

do-something > /some/file &
... ...
wait
var=$( cat /some/file )

最新更新