You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写高效Bash脚本:批量生成序列数喂给可执行文件

优化Bash脚本批量处理数字输入的效率问题

我完全懂你现在的困扰——逐个调用bu.exe实在太浪费时间了,毕竟每次启动进程都有额外开销,90000次启动的累积成本肯定很高。下面给你一套优化方案,直接批量传4500个数字给程序,把进程启动次数从90000次降到20次(90000/4500),效率会提升一大截:

方案一:批量传递命令行参数

如果bu.exe支持一次性接收多个数字作为命令行参数(从你原来的单参数调用来看,大概率是支持的),可以用这个脚本:

#!/bin/bash
start=1
batch_size=4500
max_total=90000

while [ $start -le $max_total ]; do
    # 计算当前批次的结束数字
    end=$((start + batch_size - 1))
    # 处理最后一批不足4500个的情况,避免超出最大值
    if [ $end -gt $max_total ]; then
        end=$max_total
    fi
    # 生成连续数字序列,一次性传给bu.exe
    C:/Python27/Scripts/bu.exe $(seq $start $end)
    # 更新起始数字,进入下一批
    start=$((end + 1))
done

关键说明:

  • 我们用seq $start $end生成从起始到结束的连续数字,通过命令替换$(...)把这些数字直接作为参数传给程序,每一批只启动一次bu.exe。
  • 特意处理了最后一批的边界情况:如果剩下的数字不足4500个,就把结束数字设为90000,保证不会超出总数限制。

方案二:通过标准输入传递(更稳妥)

如果担心命令行参数过多导致长度超限(虽然4500个数字大概率不会触发),或者bu.exe支持从标准输入读取每行一个数字,推荐用管道版本:

#!/bin/bash
start=1
batch_size=4500
max_total=90000

while [ $start -le $max_total ]; do
    end=$((start + batch_size - 1))
    if [ $end -gt $max_total ]; then
        end=$max_total
    fi
    # 生成数字序列,通过管道传给bu.exe的标准输入
    seq $start $end | C:/Python27/Scripts/bu.exe
    start=$((end + 1))
done

关键说明:

  • 这个版本用seq生成数字后,通过管道|把内容直接传给bu.exe的标准输入,不需要把所有数字都塞进命令行参数里,兼容性更好。
  • 你只需要确认bu.exe是否支持从标准输入读取数据——如果原来的单参数是处理单个数字,那可能需要稍微调整程序逻辑,但如果程序本身就支持批量读取,这个版本会更高效。

内容的提问来源于stack exchange,提问作者Abhinandan Ramshetty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:02:45