我有一组需要一段时间才能加载的变量,我想在后台运行它们,但它将变量呈现为null。此方法适用于命令替换变量以外的所有内容。我知道命令替换已经是一个子shell,但是我需要将它们分组并一起运行,以便我知道何时该组完成加载。
(Update=$(apt-get update && echo updated);
Upgrade=$(apt-get upgrade && echo upgraded)) &
echo $Update
echo $Upgrade
变量为空。
当后台进程完成时,将它们分组以获得单个pid的正确方法是什么。
答案 0 :(得分:2)
首先,将命令放在括号内时,它们在subshell中运行,因此永远不会在外部范围中分配变量。
第二,您根本无法在后台设置变量:
$ foo=bar &
[1] 17621
[1]+ Done foo=bar
$ echo $foo
[empty line]
第三,运行(apt-get update && apt-get upgrade) &
应该允许您do other things before wait
ing for them to finish。