在Bash脚本中通过CLI将json值传递给curl变量

时间:2017-06-26 13:55:18

标签: json bash curl

使用GET我需要通过bash脚本中的命令行将json值传递给URL。

这有效:

curl -i "http://MYURL:8080/admin/rest_api/api?api=trigger_dag&dag_id=spark_submit&conf=\{\"filename\":\"myfile.csv\"\}"

如果我想扩展json值,我宁愿通过URL参数传递变量以提高可读性。 Somethig喜欢......但这似乎不能正常工作。

generate_post_data =
{
  "filename": "myfile.csv"    
}

curl -i "http://MYURL:8080/admin/rest_api/api?api=trigger_dag&dag_id=spark_submit&conf=${generate_post_data}"

1 个答案:

答案 0 :(得分:2)

您需要正确设置变量,您应该使用--data-urlencode选项对其进行网址编码。

#!/bin/bash

generate_post_data="filename=myfile.csv"
curl -G "http://MYURL:8080/admin/rest_api/api?api=trigger_dag&dag_id=spark_submit" --data-urlencode $generate_post_data

从联系手册:

  

--data-urlencode <data>

     

(HTTP)这会发布数据,类似于其他-d, - data选项   这是执行URL编码的例外。

     

要符合CGI,该部分应以名称开头   通过分隔符和内容规范。部分可以   使用以下语法之一传递给curl:

有关详细信息,您可以使用man curl然后/data-urlencode跳转到该部分。