将包含多行的Bash变量输出到Curl json

4
我将尝试创建一个脚本,使用Github API发布一个包含命令输出的评论。该输出包含多行。
以下是我的操作步骤:
curl -H "Authorization: token oauthtoken" \ 
-H "Content-Type: application/json" \
-X POST -d@- \
https://api.github.com/repos/company/repo/issues/14/comments <<EOF
{
    "body":"$OUTPUT"
}
EOF

如何以保留多行的方式输出变量?现在当我运行该命令时,所有换行符都被压缩成一行。

1个回答

2

我认为问题的根本原因不是换行符,而是$text的值未经正确格式化为json。

请参考以下简单示例:

test="
Hello
World
"
curl -X POST -d '{"body": "'"$test"'"}' http://server.com/...

为了让任意命令的结果可以使用json发送,您需要先对文本进行json编码。


要查看新行是否起作用,请使用换行符。


我仍然遇到“解析JSON问题”。我更新了我的问题,使用heredoc似乎可以解决问题,但是会将我的多行代码压缩在一起。在heredoc中执行"'"$OUTPUT"'"也似乎不起作用。 - nwalke
是的,因为“ls -al”的输出不安全,不能直接发布为JSON格式。你需要先使用json_encode函数将其转换成JSON格式。你可以先尝试一些简单的示例,比如“foo<new line>bar”吗? - hek2mgl
啊,那个有效。所以如果对于我想要的命令输出仍然无法工作,我需要先通过json_encode运行它。 - nwalke
1
@BRPocock 单引号不会有问题。双引号会有问题,因为它会破坏 JSON。 - hek2mgl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接