bash中循环的并行嵌套

bash中循环的并行嵌套,bash,nested-loops,Bash,Nested Loops,我试图通过bash运行一个c可执行文件。可执行文件将在每次迭代中采用不同的参数,我希望并行执行,因为我有12个可用的内核 我试过了 w=1; for i in {1..100} do l=$(($i-1)); for j in {12*l..12*i} do ./run $w/100 > "$w"_out & done expr=$w % 12; if ["$expr" -eq "0"] then wait; fi; done run是c的可执行文件。我希望在每一步中以递增的参数

我试图通过bash运行一个c可执行文件。可执行文件将在每次迭代中采用不同的参数,我希望并行执行,因为我有12个可用的内核

我试过了

w=1;
for i in {1..100}
do
l=$(($i-1));
for j in {12*l..12*i}
do
./run $w/100 > "$w"_out &
done
expr=$w % 12;
if ["$expr" -eq "0"]
then wait;
fi;
done
run是c的可执行文件。我希望在每一步中以递增的参数w运行它,如果有12个内核在使用,我希望等待所有进程完成。所以基本上,我将同时运行12个可执行文件,然后等待它们完成,然后移动到下一个12个

希望我把我的观点说清楚

干杯。

改用:

您可以使用
-p
选项指定并行进程的数量,但默认为系统中的内核数量

您还可以指定
-k
,以保持输出顺序并重定向文件

要将输出重定向到单个文件,可以指定输出重定向,但必须引用它,以便shell不会解析它。例如:

parallel ./run {1} '>' {1}_out ::: {1..10}

相当于运行
/run 1>1\u out
/run 10>10\u out

{12*l..12*i}
应该做算术吗?乘法运算?您没有在循环中使用该
j
。这是有意的吗?
$W%12
是否也应该执行数学运算?您是否也对所有不同调用的错误处理感兴趣?您是否知道变量
w
从未更改?刚开始时它被设置为
1
,就是这样。使用
expr
作为变量名可能会在某个时候引起悲伤。。。一些代码缩进/格式化可能会使事情更容易理解。在循环之前添加一个
set-x
,以查看正在运行的内容…谢谢。但是,你能说得更具体一点吗?我现在学习平行线很困难。我在shell中调用./run 1>1_,然后将1增加到某个数字。我的输出将是1,2,3(对于1,2,3),你可以通过引用重定向字符来实现。有关示例,请参见编辑。@user178882查看
manparallel\u教程
是否帮助您学习GNU并行。
parallel ./run {1} '>' {1}_out ::: {1..10}