bash - 卷曲到Heroku时无效的JSON

时间:2017-09-07 19:18:19

标签: javascript bash heroku

我正在编写我的第一个bash脚本,尝试通过curl设置Heroku环境变量。但是,我从Heroku收到错误的请求错误,说我的数据是无效的JSON。但我不明白为什么。

首先,我的bash脚本:

#!/bin/bash

GIT_COMMIT=`node get_git_commit.js`

echo $GIT_COMMIT

curl -n -X PATCH https://api.heroku.com/apps/my-app-name/config-vars \
  -d '{
  "GIT_COMMIT": $GIT_COMMIT
}' \
  -H "Content-Type: application/json" \
  -H "Accept: application/vnd.heroku+json; version=3"

此脚本引用JavaScript文件get_git_commit.js

const fs = require("fs")

require("child_process").exec("git rev-parse HEAD", (err, stdout) => {
    const commit = stdout.replace(/\n/g, "")
    console.log(`"${commit}"`)
}

当我运行bash脚本时,echo正确地将git哈希打印到控制台,但是Heroku返回

{
    "id":"bad_request",
    "message":"Provided data is invalid JSON."
}

我测试的只是手动将数据设置为

"GIT_COMMIT": 1234

这完美无缺。

我对bash的写作完全不熟悉,所以也许我有一些基本惯例缺失 - 任何指导都会非常感激。

2 个答案:

答案 0 :(得分:1)

$GIT_COMMIT可能不是一个数字。

您可能会发送{ "GIT_COMMIT": 4d2fb }之类的内容,这是无效的JSON。

您需要用引号括起字符串。

答案 1 :(得分:0)

正如SLaks所说,这是一个报价问题。虽然我正在使用双引号准备git commit hash字符串,但它需要在bash脚本中添加一个单引号包装器 -

"GIT_COMMIT": "'"$GIT_COMMIT"'"

那就做到了!