Shell中while循环读取双文件做curl请求时仅读取file2一行如何解决
问题原因与修复方案
问题产生原因
- 你使用
&&逻辑符连接了两个文件的read操作,while循环的执行前提是两个read命令都成功读取到内容。由于file1仅包含1行内容,第一次循环执行后file1就已读到文件末尾(EOF),第二次循环时读取file1的操作会返回非0退出码,整个判断条件直接失效,循环终止,因此只能处理file2的第一行内容。 - 额外存在的隐患:你当前使用
> output.txt重定向curl输出,每次循环都会覆盖上一次的写入结果,即便循环正常执行多次,最终也只会保留最后一次请求的返回内容。
修复方案
由于file1仅存储1行固定的授权凭证,不需要放到循环中重复读取,提前读取为全局变量即可,循环仅需要遍历file2的多行请求路径:
# 提前读取file1中的授权token token=$(<"$file1") # 可选:先清空历史输出文件,不需要保留历史可删除该行 > output.txt # 循环仅读取file2的每行内容发起请求 while IFS= read -r line1; do curl -H "Authorization: Bearer $token" -X GET "$url$line1" >> output.txt done < "$file2"
如果需要将每次请求的结果保存为独立文件,可将重定向逻辑改为> "output_${line1//\//_}.txt",避免路径中的特殊字符导致写入失败。
内容的提问来源于stack exchange,提问作者sudhir mirajkar
相关产品推荐
相关产品推荐

