Bash 尝试卷曲松弛时获取无效有效负载

Bash 尝试卷曲松弛时获取无效有效负载,bash,curl,nginx,slack,Bash,Curl,Nginx,Slack,当nginx无法重新加载时,我正在尝试卷曲松弛。我能够检查nginx是否失败,并且在失败时可以卷曲松弛。尝试在cURL命令中包含来自失败重新加载的错误消息时,我遇到无效负载错误。这是我要做的脚本: #!/bin/bash OUTPUT=$(nginx -s reload 2>&1 > /dev/null >/mnt/efs/out.txt) ESCAPE=$(echo $OUTPUT | sed 's/"/\"/g' | sed "s/'/\'/g" ) ngin

当nginx无法重新加载时,我正在尝试卷曲松弛。我能够检查nginx是否失败,并且在失败时可以卷曲松弛。尝试在cURL命令中包含来自失败重新加载的错误消息时,我遇到无效负载错误。这是我要做的脚本:

#!/bin/bash

OUTPUT=$(nginx -s reload 2>&1 > /dev/null >/mnt/efs/out.txt)

ESCAPE=$(echo $OUTPUT | sed 's/"/\"/g' | sed "s/'/\'/g" )

nginx -t || curl -X POST --data-urlencode 'payload={"username": "reload-monitor-lizard", "text": "'"${ESCAPE}"'", "icon_emoji": ":ghost:"}' https://hooks.slack.com/services/xxxxxxx/xxxxx/xxxxxxxxxxxxxxxxxxxx
我尝试过使用引号,但它仍然会给我无效的负载错误或发送错误

${ESCAPE}

作为信息。对我做错了什么有什么建议吗

更新:

通过将我的变量中的双引号替换为单引号修复了此问题,如下所示:

ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )

您正试图将www表单URL编码的数据发布到一个需要JSON的端点


除此之外,您的代码工作正常。

通过将变量中的双引号替换为单引号进行修复。像这样:

ESCAPE=$(echo $OUTPUT | sed "s/\"/'/g" )

这对我来说很好:

curl -X POST -H \"Content-type: application/json\" --data \"{\\\"text\\\":\\\"Here your text!!\\\"}\" <host_slack>
curl-xpost-H\“内容类型:application/json\”--data\“{\\\\\\”text\\\”:\\\“这里是您的文本!!\\\”}”

我可以通过用单引号替换变量中的双引号来解决这个问题:
ESCAPE=$(echo$OUTPUT | sed“s/\”/“'/g”)
这与您所说的有关吗?在我看来,双引号导致特殊字符被发送到字符串之外。