Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将后台作业的输出分配到bash变量中?_Linux_Bash - Fatal编程技术网

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

Linux 如何将后台作业的输出分配到bash变量中?,linux,bash,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

我想在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并行或临时文件

更清楚地说,这不是一个无关紧要的问题,我想:

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:/#

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

 $ 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

希望能有帮助。

我不明白你为什么睡不着觉。你为什么不说
sleep 2&&var=$(echo“hello world”)&
?@fedorqui,这只是一个玩具模式的例子,以演示我想要实现的目标。考虑插入括号是异步操作(IO)长执行时间命令的情况。OK,我明白了。可能值得一读。我还没有完全看清楚,但可能包含有趣的信息。@0x90:我搞错了。你考虑过使用命名管道吗?嗯,不要成为
root
,尤其是当你不知道自己在做什么的时候。这是个好主意。FIFO也是阻塞的,因此人们也可以将其用作同步机制。