卷曲为变量,将输出分配给变量

时间:2016-02-25 22:55:17

标签: bash curl

我将curl指定为变量并将curl的输出分配给变量时遇到问题:

#get results url, format json
URL=$(curl https://api.apifier.com/xy)
#jq is a cli json interpreter
#resultUrl contains the final URL which we want download
OK= "$URL" | jq '.resultsUrl'
#api probably is running
sleep 5
curl "$OK"

也许这是微不足道的,但我不知道问题出在哪里。

2 个答案:

答案 0 :(得分:2)

我的猜测是:

jq '.resultsUrl'

使用引号输出字段resultsUrl ,因此curl不会正确处理它。此外,$URL | ...不起作用,您必须直接使用echocurl

尝试

OK=$(curl -s https://api.apifier.com/v1/xHbBnrZ9rxF4CdKjo/crawlers/Example_Alcatraz_Cruises/execute?token=nJ9ohCHZPaJRFEb7nFqtzm76u | jq -r '.resultsUrl')
curl -s "$OK"

这对我来说是

[{   "id": 2,   "url": "https://www.alcatrazcruises.com/SearchEventDaySpan.aspx?date=02-25-2016&selected=", "loadedUrl": "https://www.alcatrazcruises.com/SearchEventDaySpan.aspx?date=02-25-2016&selected=", "requestedAt": "2016-02-25T23:24:52.611Z",   "loadingStartedAt": "2016-02-25T23:24:54.663Z",   "loadingFinishedAt": "2016-02-25T23:24:55.642Z",   "loadErrorCode": null,   "pageFunctionStartedAt": "2016-02-25T23:24:55.839Z",   "pageFunctionFinishedAt": "2016-02-25T23:24:55.841Z",   "uniqueKey": "https://www.alcatrazcruises.com/SearchEventDaySpan.aspx?date=02-25-2016&selected=", "type": "UserEnqueued", ...

这应该是你所期望的。

但是,有时第一次API调用会产生错误:

{
  "type": "ALREADY_RUNNING",
  "message": "The act is already running and concurrent execution is not allowed"
}

因此resultsURL将为null,您必须处理此错误案例。

答案 1 :(得分:0)

你的行

OK= "$URL" | jq '.resultsURL'

将环境变量OK设置为空字符串,然后尝试执行"$URL"作为命令并将其输出传递给jq。如果要将OK设置为命令的结果,则必须使用$OK=(...),就像设置URL时一样。正确的语法是:

OK=$(echo "$URL" | jq '.resultsURL')

要删除.jq输出中的引号,您可以执行以下操作:

OK=$(echo "$URL" | jq '.resultsURL' | tr -d '"')