将命令替换变量分组到子外壳中以在后台运行

时间:2019-06-17 00:19:27

标签: bash

我有一组需要一段时间才能加载的变量,我想在后台运行它们,但它将变量呈现为null。此方法适用于命令替换变量以外的所有内容。我知道命令替换已经是一个子shell,但是我需要将它们分组并一起运行,以便我知道何时该组完成加载。

(Update=$(apt-get update && echo updated);
 Upgrade=$(apt-get upgrade && echo upgraded)) &
echo $Update 
echo $Upgrade

变量为空。

当后台进程完成时,将它们分组以获得单个pid的正确方法是什么。

1 个答案:

答案 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 waiting for them to finish