我正在编写我的第一个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的写作完全不熟悉,所以也许我有一些基本惯例缺失 - 任何指导都会非常感激。
答案 0 :(得分:1)
$GIT_COMMIT
可能不是一个数字。
您可能会发送{ "GIT_COMMIT": 4d2fb }
之类的内容,这是无效的JSON。
您需要用引号括起字符串。
答案 1 :(得分:0)
正如SLaks所说,这是一个报价问题。虽然我正在使用双引号准备git commit hash字符串,但它需要在bash脚本中添加一个单引号包装器 -
"GIT_COMMIT": "'"$GIT_COMMIT"'"
那就做到了!