Reputation: 40972
I would like to run a background job in bash and assign its result to a variable.
I prefer not to use temporary files and I would love to run multiple similar background tasks at the same time.
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:/#
I prefer not to use gnu-parallel or temp files.
To be even clearer that's not a trivial question IMHO:
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:/#
Upvotes: 5
Views: 1532
Reputation: 3154
With named pipes it's possible. However, I don't know whether it'll be considered as a temp file :
$ 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
Hope it helps.
Upvotes: 3