Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Github api未解析多行shell变量_Json_Shell_Github Api - Fatal编程技术网

Json Github api未解析多行shell变量

Json Github api未解析多行shell变量,json,shell,github-api,Json,Shell,Github Api,我在jenkins配置中有一个文本参数(来自jenkins job dsl插件),允许您输入多行注释。当从shell脚本将发布发布发布发布到github存储库时,我将该变量用作body值。我得到这个错误,说解析json有问题,我找不到解决办法。下面我给你举个例子。请帮忙 PERSONAL_ACCESS_TOKEN="random" TAG_NAME="12.0.0" VERSION_BUMP="major" MIGRATION_DOCUMENT="This is first line This

我在jenkins配置中有一个文本参数(来自jenkins job dsl插件),允许您输入多行注释。当从shell脚本将发布发布发布发布到github存储库时,我将该变量用作body值。我得到这个错误,说解析json有问题,我找不到解决办法。下面我给你举个例子。请帮忙

PERSONAL_ACCESS_TOKEN="random"
TAG_NAME="12.0.0"
VERSION_BUMP="major"
MIGRATION_DOCUMENT="This is first line
This is second line"

curl -i \
-H "Authorization: token ${PERSONAL_ACCESS_TOKEN}" \
-d '{"tag_name": "'"${TAG_NAME}"'", "name": "'"${VERSION_BUMP}"'", \
"body": "'"${MIGRATION_DOCUMENT}"'"}' \
https://github.deere.com/api/v3/repos/randomOrg/testRepo/releases
这个

是无效的JSON,因为字符串不能包含控制字符,如换行符

如果您有一个包含换行符的字符串,则可以使用shell参数展开将其转换为
\n

$ var='a
b'
$ echo "$var"
a
b
$ echo "${var//$'\n'/'\n'}"
a\nb
因此,要将字符串输入JSON对象,请使用

"body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"
在JSON对象的末尾

此外,如果在单引号中使用行继续符,例如

var='abc \
def'
然后反斜杠和换行符为文字:

$ echo "$var"
abc \
def
不要在单引号字符串中使用这样的行继续

总而言之:

curl -i \
    -H "Authorization: token ${PERSONAL_ACCESS_TOKEN}" \
    -d '{"tag_name": "'"${TAG_NAME}"'", "name": "'"${VERSION_BUMP}"'", "body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"}' \
    https://github.deere.com/api/v3/repos/randomOrg/testRepo/releases
如果确实需要,仍然可以使用行继续,但必须在双引号上下文中:

curl -i \
    -H "Authorization: token ${PERSONAL_ACCESS_TOKEN}" \
    -d '{"tag_name": "'"${TAG_NAME}"'", "name": "'"${VERSION_BUMP}"'", '"\
        "'"body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"}' \
    https://github.deere.com/api/v3/repos/randomOrg/testRepo/releases

作为旁注,您不应该为变量使用所有大写名称;这些都是为环境变量保留的,请参见(第四段)。

因此,我们的目标是将github标记作为多行文本参数输入的一部分,并使用前面提到的curl命令发布到github。因此,变量MIGRATION_文档将是一个自定义多行注释。谢谢。这对新生产线有效。你介意给我指一下你在那里做了什么吗。我想扩展它,这样我就可以使用github标记作为多行注释的一部分。明智的做法是使用
jq
,而不是希望换行后文本有效replaced@thatotherguy同意–那么我们就牢牢地掌握在这个领域中了。@TheotherGuy感谢你把我介绍给
jq
。我相信这会对我有很大帮助。
curl -i \
    -H "Authorization: token ${PERSONAL_ACCESS_TOKEN}" \
    -d '{"tag_name": "'"${TAG_NAME}"'", "name": "'"${VERSION_BUMP}"'", '"\
        "'"body": "'"${MIGRATION_DOCUMENT//$'\n'/'\n'}"'"}' \
    https://github.deere.com/api/v3/repos/randomOrg/testRepo/releases