【问题标题】:Output bash variable with multiple lines to curl json输出具有多行的 bash 变量以卷曲 json
【发布时间】:2015-06-08 15:07:30
【问题描述】:

我正在尝试创建一个脚本,该脚本将使用 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

我怎样才能以尊重其中包含的多行的方式输出变量?现在,当我运行该命令时,所有换行符都被压缩到一行。

【问题讨论】:

    标签: json bash curl github-api


    【解决方案1】:

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

    按照这个简单的例子:

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

    查看新的生产线。


    为了能够使用 json 发送任意命令的结果,您需要对之前的文本进行 json 编码。

    【讨论】:

    • 我仍然得到Problems parsing JSON 这个。我更新了我的问题以使用heredoc,因为这似乎有效,但将我的多行压缩在一起。在heredoc 中执行"'"$OUTPUT"'" 似乎也不起作用。
    • 是的,因为ls -al 的输出不能安全地发布为 json。您需要先对其进行 json_encode .. 可以先尝试像 foo&lt;new line&gt;bar 这样简单的东西吗?
    • 啊,成功了。所以如果它仍然不能用于我想要的命令输出,我需要先通过 json_encode 运行它。
    • @BRPocock 单引号不会有问题。双引号会是个问题,因为它会破坏 json
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2010-10-11
    • 2016-03-26
    相关资源
    最近更新 更多