0

所以,在我的脚本中,我想在后台启动两个进程,之后我想等待两者都完成,并且我想在变量中获取进程的标准输出。

要在后台运行,我可以使用
command &

要在变量中获得结果,我可以在反引号内运行命令。

但是当我command &在反引号内做时,整个事情就变得阻塞了。

那么,我该如何解决我的问题呢?

4

1 回答 1

3

后台运行的命令在子进程中运行,子进程无法修改父进程中的参数(变量)。所以从技术上讲,你要找的东西是不可能的。

但是,您可以将孩子的stdout(并且,如果您愿意,也可以stderr)存储在文件中;你只需要确保给文件一个唯一的名称。man mktemp(例如,参见。)在您wait为后台进程完成后,您可以将临时文件读入一个参数,然后删除该文件。

tmp1=$(mktemp)
tmp2=$(mktemp)
command1 > "$tmp1" &
command2 > "$tmp2" &
wait
OUTPUT1=$( < "$tmp1" ) && rm "$tmp1"
OUTPUT2=$( < "$tmp2" ) && rm "$tmp2"
于 2013-07-24T07:17:49.590 回答