gpt4 book ai didi

linux - 使用脚本运行有限数量的并行程序

转载 作者:IT王子 更新时间:2023-10-29 01:06:04 26 4
gpt4 key购买 nike

基于 This solution我正在尝试开发一个将运行的进程数限制为 4 的脚本。但是作为替代方案,我希望将作业存储在我通过索引引用的数组中。我写了以下内容:

todo_array[1]="echo start1;sleep 3;echo done1"
todo_array[2]="echo start2;sleep 3;echo done2"
todo_array[3]="echo start3;sleep 3;echo done3"
todo_array[4]="echo start4;sleep 3;echo done4"
todo_array[5]="echo start5;sleep 3;echo done5"
todo_array[6]="echo start6;sleep 3;echo done6"
todo_array[7]="echo start7;sleep 3;echo done7"
todo_array[8]="echo start8;sleep 3;echo done8"
todo_array[9]="echo start9;sleep 3;echo done9"

max_jobs=4

seq ${#todo_array[@]} | xargs -i --max-procs=$max_jobs bash -c $todo_array[{}]

然而,当我执行时,我得到一个空的 9 newlinex 输出。我究竟做错了什么?谢谢

编辑:我将其修改为

seq ${#todo_array[@]} | xargs -i --max-procs=$max_jobs bash -c "$todo_array[{}]"

我得到以下奇怪的输出:

start1
start1
start1
start1
done1[2]
done1[3]
done1[1]
done1[4]
start1
start1
start1
start1
done1[5]
done1[6]
done1[7]
done1[8]
start1
done1[9]

最佳答案

试试这个:

#!/bin/bash

todo_array[1]="echo start1;sleep 3;echo done1"
todo_array[2]="echo start2;sleep 3;echo done2"
todo_array[3]="echo start3;sleep 3;echo done3"
todo_array[4]="echo start4;sleep 3;echo done4"
todo_array[5]="echo start5;sleep 3;echo done5"
todo_array[6]="echo start6;sleep 3;echo done6"
todo_array[7]="echo start7;sleep 3;echo done7"
todo_array[8]="echo start8;sleep 3;echo done8"
todo_array[9]="echo start9;sleep 3;echo done9"

max_jobs=4

for i in "${todo_array[@]}"
do
echo $i
done | xargs -IX --max-procs=$max_jobs bash -c "X"

关于linux - 使用脚本运行有限数量的并行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com