我在Bash中很有经验,我有一组变量存储在一个数组中,我想传递给我想同时运行的shell脚本 现在我有类似虚拟代码的工作
array = (1 2 3 4)
for i in array
do
if [condition] then;
call script1
else
call script2
fi
done
但我想要的不是逐个遍历数组的元素,而是希望在循环中同时运行它们中的每一个。我该怎么做我知道如何使用&同时调用脚本但我不知道如何处理if条件。
答案 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