【问题标题】:Github api not parsing multi line shell variablesGithub api不解析多行shell变量
【发布时间】:2019-03-08 00:04:59
【问题描述】:

我在 jenkins 配置中有一个文本参数(来自 jenkins job dsl 插件),它允许您输入多行注释。从 shell 脚本向 github 存储库发布版本时,我使用该变量作为正文值。我收到这个错误,说解析 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

【问题讨论】:

  • 所以目标是使用 github markdown 作为多行文本参数输入的一部分,并使用上述 curl 命令将发布发布到 github。因此变量 MIGRATION_DOCUMENT 将是自定义多行注释。

标签: json shell github-api


【解决方案1】:

这个

{ "a": "b
c" }

是无效的 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

作为旁注,您不应该对变量使用全部大写的名称;这些是为环境变量保留的,请参阅the POSIX spec(第四段)。

【讨论】:

  • 谢谢。这适用于新生产线。你介意给我指点关于你在那里所做的事情的文档吗?我想扩展它,以便我可以使用 github markdown 作为该多行注释的一部分。
  • 明智的做法是使用jq,而不是希望换行后文本有效
  • @thatotherguy 同意——那么我们就牢牢地处于由this answer 出色处理的领域。
  • @thatotherguy 感谢您将我介绍给jq。相信在这里对我会有很大的帮助。
猜你喜欢
  • 2019-12-30
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
  • 2015-03-10
  • 2020-09-08
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
相关资源
最近更新 更多