我想按以下方式运行任务 a_1、a_2、b_1、b_2、c_1、c_2:a_i、b_j、c_k(其中 i、j、k 为 0 或 1)可以并行运行。但 a_2 应该在 a_1 完成后立即运行(它们使用相同的资源,因此 a_2 应该等待 a_1 释放资源)。与b、c相同。
我怎样才能在 bash 中做到这一点?
答案1
( a_1; a_2 ) &
( b_1; b_2 ) &
( c_1; c_2 ) &
wait
这将运行三个后台作业,然后等待所有作业完成。三个后台作业中的每一个都会依次运行其命令。
对于稍微复杂一点的变化:
for task in a b c; do
for num in 1 2; do "${task}_$num"; done &
done
wait
这会做同样的事情,但会构造 strings等a_1
,a_2
然后执行将这些字符串生成为命令所产生的任务。显然,只有当您的任务是具有这些名称的实际命令时,这才有效。
答案2
使用 GNU 并行:
parallel {1}_{2} ::: a b c ::: 0 1
parallel {}_2 ::: a b c
或者:
parallel '{}_0; {}_1; {}_2' ::: a b c