同时动态创建和运行bash脚本部分

时间:2016-05-18 11:40:56

标签: bash

我在Bash中很有经验,我有一组变量存储在一个数组中,我想传递给我想同时运行的shell脚本 现在我有类似虚拟代码的工作

array = (1 2 3 4)

for i in array
do
 if [condition] then;
    call script1
 else 
    call script2
 fi
done

但我想要的不是逐个遍历数组的元素,而是希望在循环中同时运行它们中的每一个。我该怎么做我知道如何使用&同时调用脚本但我不知道如何处理if条件。

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用GNU Parallel?我认为这正是你所寻找的。我不是并行专家,但我知道你可以轻松地将换行符分隔的命令列表输入其中:

# An array of commands to run in parallel
array=(command1 command2 command3 command4)

# Pipe the array of commands to parallel as a list
(IFS=$'\n'; echo "${array[*]}") | parallel -j4

-j标志允许您选择要运行的并行线程数。 Parallel将遍历列表,与bash -c并行执行每一行,直到所有行都已执行。

我经常使用for循环来构建命令列表并将输出直接并行输出。例如:

## Multicore Parallel FizzBuzz Engine
for((i=1;i<=100;++i));do
  echo 'i='$i';p="";((i%3==0))&&p=Fizz;((i%5==0))&&p+=Buzz;[[ ! $p ]]&&p=$i;echo $p;'; 
done | parallel -kj4