如何并行运行一系列命令,并将其输出存储在变量中?
我试过了:
output=`(echo -n "started "; sleep 2; echo "stopped") &`
echo "output before=$output"
wait
echo "output after=$output"
暂停了两秒钟,然后是:
output before=started stopped
output after=started stopped
我期待:
output before=
<2 seconds pause>
output after=started stopped
如何在后台运行一系列命令,并将其输出存储在变量中?
答案 0 :(得分:5)
来自manual:
如果命令由控制操作符
‘&’
终止,那么shell 子shell中异步执行命令。这被称为 在后台执行命令。 shell不等待 要完成的命令,返回状态为0(true)。
解决方法是将输出存储在文件中并从中读取。以下内容可能对您有用:
tempout=$(mktemp)
( echo -n "started "; sleep 2; echo "stopped" ) > "${tempout}" &
echo "output before=$(<$tempout)"
wait
echo "output after=$(<$tempout)"
答案 1 :(得分:0)
我认为原因是这条线的评价:
output=`(echo -n "started "; sleep 2; echo "stopped") &`
即使您想将整个命令放在后台(这会导致返回代码0,如同提到的devnull) - 但结果未知。并为$ output赋值 - 它必须等待原始命令退出。
你没有将var赋值放在后台。
但仍然@ devnull的解决方法适用。您可以使用命名管道代替文件。