如何在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
相关产品推荐
相关产品推荐

