将多个curl请求的输出附加到shell脚本的文件中

时间:2015-03-23 20:19:21

标签: bash shell curl

我尝试通过内部API获取JSON输出,并在cURL请求之间的参数值中添加100。我需要循环,因为它将每个请求的最大结果数量限制为100.我被告知增加,你应该能够得到你需要的东西"。

无论如何,这是我写的:

#!/bin/bash

COUNTER=100
until [ COUNTER -gt 30000 ]; do
    curl -vs "http://example.com/locations/city?limit=100&offset=$COUNTER" >> cities.json
    let COUNTER=COUNTER+100
done

问题是我在终端中收到了一堆奇怪的消息,而我试图重定向输出的文件仍包含它的原始100个对象。我觉得我可能错过了一些非常明显的东西。有什么想法吗?我确实在until循环中使用了一个有点旧的教程,所以可能它是一个语法问题?

提前谢谢!

编辑:我并不反对完全替代方法,但我希望这会有点直截了当。我认为我缺乏经验是主要限制因素。

2 个答案:

答案 0 :(得分:1)

如果您只想覆盖文件的内容一次,那么整个循环......

#!/bin/bash
# ^-- NOT /bin/sh, as this uses bash-only syntax

for (( counter=100; counter<=30000; counter+=100 )); do
    curl -vs "http://example.com/locations/city?limit=100&offset=$counter"
done >cities.json

这实际上比在每个>>cities.json命令上放置curl更有效,因为它只打开输出文件一次,并且具有清除文件的副作用(您似乎想要)# 39;循环开始时的前内容。

答案 1 :(得分:1)

您可能会发现使用GNU Parallel可以更快地完成此操作:

parallel -k curl -vs "http://example.com/locations/city?limit=100\&offset={}" ::: $(seq 100 100 30000) > cities.json