社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

Github API未分析多行shell变量

Kindman • 5 年前 • 168 次点击  

我在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
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30512
 
168 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Benjamin W.
Reply   •   1 楼
Benjamin W.    5 年前

这个

{ "a": "b
c" }

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

如果有包含换行符的字符串,可以将其转换为 \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 (第四段)。