使用jq和多个变量创建一个json文件

时间:2018-06-26 13:05:20

标签: arguments jq

我有一个像这样的json文件:

{
  "name": "Job",
  "type": "xdb",
  "typeLogoUrl": "public/app/plugins/logo.svg",
  "access": "proxy",
  "url": "http://xdb:80",
  "password": {},
  "user": "xx",
  "database": "Job",
  "basicAuth": true,
  "basicAuthUser": "xx",
  "basicAuthPassword": {},
  "withCredentials": true,
  "isDefault": false,
  "jsonData": {},
  "secureJsonFields": null
}

现在我要做的就是将环境变量传递给密钥密码和basicAuthPassword并生成新的json文件,如下所示:

{
  "name": "Job",
  "type": "xdb",
  "typeLogoUrl": "public/app/plugins/logo.svg",
  "access": "proxy",
  "url": "http://xdb:80",
  "password": "password" ,
  "user": "xx",
  "database": "Job",
  "basicAuth": true,
  "basicAuthUser": "xx",
  "basicAuthPassword": "password",
  "withCredentials": true,
  "isDefault": false,
  "jsonData": {},
  "secureJsonFields": null
}

我试图像下面那样替换至少一个键,这给了我空值。

/usr/local/bin/jq -n --arg "password" '.password = $arg' < input.json

有人可以建议我如何实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

从安全角度考虑,在命令行中传递密码不是一个好主意,但我希望您知道自己在做什么。

假设,您需要像这样修改jq命令:

jq --arg p "password" '.password = $p | .basicAuthPassword =  $p' < input.json

答案 1 :(得分:1)

如果密码已经是一个环境变量(虽然可能不是一个好主意),那么为了避免在命令行中暴露它,可以使用env内置命令,如下所示:

.password = env.password

要考虑的另一种方法是将密码放入一个临时文件,然后使用--argfile命令行选项。或者,如果您的外壳支持,--argfile pw <(echo "\"$password\"")