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

Bash中如何将seq数字序列输入GNU Parallel实现curl并行请求

问题原因

你遇到的错误核心是重定向语法使用错误:
< 输入重定向符要求右侧必须是文件路径,而$(seq 1 100)展开后是1 2 3 ... 100的数字序列,不是合法文件路径,shell无法识别多字符串的重定向目标,因此抛出ambiguous类错误。你之前尝试的反引号写法和$()是等价的,本质问题没有解决。

可行的修改方案
  • 方案1:用管道传递输入(最常用,无参数长度限制)
    直接把seq的输出通过管道传给parallel作为输入,不需要重定向,对应执行行修改为:
seq 1 100 | parallel -j10 brx
  • 方案2:使用进程替换实现重定向
    如果你需要保留重定向的写法,用bash的进程替换语法<(命令),它会把命令输出模拟成临时文件供重定向读取,注意两个<之间必须有空格,对应执行行修改为:
parallel -j10 brx < <(seq 1 100)
  • 方案3:用parallel内置的参数输入语法
    parallel支持通过::: 标记直接接收输入参数,适合序列较短的场景,对应执行行修改为:
parallel -j10 brx ::: $(seq 1 100)

注意:如果序列长度极大(超过shell命令行参数长度上限),该方案会报错,优先选择方案1

修改后的完整示例(采用方案1)
#!/bin/bash

brx() {
  num="$1"
  curl -s "https://www.example.com/$num"
}
export -f brx

while true; do
  seq 1 100 | parallel -j10 brx
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:06:04