如何将后台作业的输出分配给bash变量?

时间:2016-06-16 08:55:55

标签: linux bash

我想在bash中运行后台作业并将其结果分配给变量。

我不想使用临时文件,我希望能同时运行多个类似的后台任务。

root@root:/# var=$(echo "hello world")
root@root:/# echo $var
hello world
root@root:/# back_var=$(sleep 2s && echo "hello world back") &
[1] 2102
root@root:/# wait
root@root:/#jobs
[1]+  Done                    back_var=$(sleep 2s && echo "hello world back")
root@root:/# echo $back_var

root@root:/# 

我不想使用gnu-parallel或temp文件。

更清楚的是,这不是一个微不足道的问题恕我直言:

root@root:/# back_var_1=$(sleep 4s && echo "Don't waste my time" &) &
[1] 26584
root@root:/# wait
[1]+  Done                    back_var_1=$(sleep 4s && echo "Don't waste my time" &)
root@root:/# echo $back_var_1

root@root:/#

1 个答案:

答案 0 :(得分:2)

使用命名管道是可能的。但是,我不知道它是否会被视为临时文件:

 $ mkfifo pipo
 $ sleep 4s && echo "this is not fair" > pipo & 
 [1] 25356

 $ back_var=$(cat pipo)
 [1]+  Done                    sleep 4s && echo "this is not fair" > pipo

 $ echo $back_var
 this is not fair

希望它有所帮助。