Set variables in parallel in bash

后端 未结 2 1938
小蘑菇
小蘑菇 2021-01-20 20:53

Here\'s an example program:

#!/bin/bash

for x in {1..5}
do
  output[$x]=$(echo $x) &
done

wait

for x in {1..5}
do
  echo ${output[$x]}
done

相关标签:
2条回答
  • 2021-01-20 20:59

    This

    output[$x]=$(echo $x) &
    

    puts the whole assignment in a background task (sub-process) and that's why you're not seeing the result, since it's not propogated to the parent process.

    You can use wait to wait for subprocesses, but returning results (other than status codes) is going to be difficult. Perhaps you can write intermediate results to a file, and collect those results after all processes have finished ? (not nice, I appreciate)

    0 讨论(0)
  • 2021-01-20 21:21

    If you want to avoid writing files, you can use GNU parallel:

    #!/bin/bash
    output=(`parallel -k --gnu echo {1} ::: {1..5}`)
    for i in ${output[@]}
    do
       echo $i
    done
    

    The -k is to preserve the order of the output

    0 讨论(0)
提交回复
热议问题