在bash脚本中,当我设置:
myUrl="https://api.site.com/api/v2/export/123456"
然后运行:
awsAccess=$(curl -X GET $(echo "${myUrl}") \
--header "Accept: application/json" \
--header "Authorization: Bearer myAuthCode")
我得到了正确的JSON结果:
{"status":"Complete","total_files":1,"completed_files":1,"file_urls":["https://s3.amazonaws.com/media.site.com/task/123456/encoded-file-name.csv?AWSAccessKeyId=myAWSAccessKeyId"]}
但是当我获得这样的代币时:
myToken=$(echo "${content}" | jq -r '.token' <<< "${myAccessJSON}")
哪些设置myToken=123456
我构建了我的URL变量:
baseUrl="https://api.site.com/api/v2/export/"
myUrl=$baseUrl$myToken
然后我跑:
awsAccess=$(curl -X GET $(echo "${myUrl}") \
--header "Accept: application/json" \
--header "Authorization: Bearer myAuthCode")
我收到以下JSON响应:
{"status":"Pending","total_files":1,"completed_files":0,"file_urls":[]}
其中不包含我需要下载我请求的文件的URL。更奇怪的是,当我将上面的命令直接输入到cli中时,令牌会被正确附加,我会收到带有我需要的URL的完整响应。如何通过shell脚本传递与cURL请求中的令牌连接的URL?
答案 0 :(得分:0)
所以,我觉得现在有点傻。事实证明我的语法很好。我的脚本所做的是连接到服务器,请求令牌,然后重新连接到同一服务器以请求数据。我试图在单个批处理脚本中实现这一点。事实证明,当我通过使用我在第一个连接上收到的令牌进行第二次连接来请求数据时,第一个会话仍处于打开状态。因此,不是将JSON响应写入bash会话变量,而是将第一个脚本的响应输出到文件并结束脚本,从而关闭连接。然后我用第二个批处理脚本读取该文件并打开一个新连接,现在一切正常。