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

如何在shell脚本中每隔400ms执行curl并将结果存入变量

Shell 脚本实现方案

你原来的写法中&会将curl赋值语句放入后台子进程执行,父进程无法读取子进程内的变量,因此无法拿到result的赋值结果,可采用以下两种方案实现需求:

方案1:串行请求(实现简单,适用于curl请求耗时极短的场景)

每次请求完成后等待400ms再发起下一次,所有操作在当前进程执行,变量不会丢失:

#!/bin/bash
# 初始化数组存储所有请求返回值
request_results=()

for ((count=0; count<10; count++)); do
    # 执行curl请求,结果追加到数组,2>/dev/null可屏蔽curl的错误输出
    request_results+=("$(curl --location --request GET 'http://localhost:8087/say-hello' 2>/dev/null)")
    # 最后一次请求不需要等待
    [[ ${count} -lt 9 ]] && sleep 0.4
done

# 所有请求完成后统一写入文件,每次请求结果占一行
printf "%s\n" "${request_results[@]}" > ./curl_result.txt

方案2:准时间隔发起请求(不受curl耗时影响,适用于需要严格每400ms发起一次请求的场景)

通过临时文件存储后台进程的执行结果,保证请求发起间隔的准确性:

#!/bin/bash
# 创建临时目录存储单条请求结果
temp_dir=$(mktemp -d)

for ((count=0; count<10; count++)); do
    # 后台执行curl,结果写入对应序号的临时文件
    (curl --location --request GET 'http://localhost:8087/say-hello' 2>/dev/null > "${temp_dir}/res_${count}") &
    # 固定等待400ms发起下一次请求
    sleep 0.4
done

# 等待所有后台curl进程执行完成
wait

# 按请求顺序汇总结果写入目标文件
for ((count=0; count<10; count++)); do
    cat "${temp_dir}/res_${count}"
    echo
done > ./curl_result.txt

# 清理临时文件
rm -rf "${temp_dir}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:05