【问题标题】:Set variables in parallel in bash在bash中并行设置变量
【发布时间】:2013-01-31 13:02:30
【问题描述】:

这是一个示例程序:

#!/bin/bash

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

wait

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

我希望它能够运行并打印出分配给output 数组的每个成员的值,但它什么也不打印。删除 & 会正确分配变量。我必须使用不同的语法来并行实现吗?

【问题讨论】:

    标签: bash parallel-processing


    【解决方案1】:

    这个

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

    整个分配放在后台任务(子进程)中,这就是您看不到结果的原因,因为它没有传播到父进程。

    您可以使用wait to wait for subprocesses,但返回结果(状态码除外)会很困难。也许您可以将中间结果写入文件,并在所有进程完成后收集这些结果? (不太好,我很感激)

    【讨论】:

      【解决方案2】:

      如果想避免写入文件,可以使用GNU parallel

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

      -k是保留输出的顺序

      【讨论】:

        猜你喜欢
        • 2018-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-14
        • 2015-03-29
        • 2018-06-24
        • 2014-03-02
        相关资源
        最近更新 更多