在 bash 中定义的 json 中转义空格
Escape whitespaces in a json defined in bash
如果我的构建脚本失败,我想向我们最重要的频道发送通知:
test.sh
#!/bin/bash
set -eEx
projectName="$(grep '<name>' config.xml | sed "s@.*<name>\(.*\)</name>.*@@" | xargs)"
payload="payload={\"text\":\"${projectName}\"}\""
echo $payload
# notify mattermost channel "Jenkins Failures" in case this script fails
function notifyMattermostOnError() {
curl -i -X POST -d \
${payload} \
https://mattermost.company.com/hooks/<key>
}
notifyMattermostOnError
我正在从 XML 文件中提取项目名称,然后将其放入消息中。使用 grep
/sed
/xargs
提取项目名称正在运行,这不是我的问题。
projectName
可以是带空格的字符串,f.ex。该值可以是 Company App
。 运行 当 运行 test.sh
时会插入反引号:
mles:project mles$ ./test.sh
++ grep '<name>' config.xml
++ sed 's@.*<name>\(.*\)</name>.*@@'
+ projectName='Company App'
+ payload='payload={"text":"Company App"}"'
+ echo 'payload={"text":"Company' 'App"}"'
payload={"text":"Company App"}"
+ notifyMattermostOnError
+ curl -i -X POST -d 'payload={"text":"Company' 'App"}"' https://mattermost.company.com/hooks/<key>
curl: (3) [globbing] unmatched close brace/bracket in column 8
问题是负载 json 被拆分为 'payload={"text":"Company'
和 'App"}"'
。我怎样才能防止这种情况发生?我已经在我的字符串周围设置了引号。
最起码要引用参数展开:
curl -i -X POST -d "$payload" https://mattermost.company.com/hooks/<key>
您还应该使用知道如何正确转义字符串以用于 JSON:
的工具
payload="payload=$(jq -n --arg pn "$projectName" '{text :$pn}')"
最后,您应该使用了解 XML 的工具来提取项目名称,而不是希望 XML 的格式设置为 grep
可能有效的方式。
projectName=$(xmlstarlet sel -t -v name config.xml)
如果我的构建脚本失败,我想向我们最重要的频道发送通知:
test.sh
#!/bin/bash
set -eEx
projectName="$(grep '<name>' config.xml | sed "s@.*<name>\(.*\)</name>.*@@" | xargs)"
payload="payload={\"text\":\"${projectName}\"}\""
echo $payload
# notify mattermost channel "Jenkins Failures" in case this script fails
function notifyMattermostOnError() {
curl -i -X POST -d \
${payload} \
https://mattermost.company.com/hooks/<key>
}
notifyMattermostOnError
我正在从 XML 文件中提取项目名称,然后将其放入消息中。使用 grep
/sed
/xargs
提取项目名称正在运行,这不是我的问题。
projectName
可以是带空格的字符串,f.ex。该值可以是 Company App
。 运行 当 运行 test.sh
时会插入反引号:
mles:project mles$ ./test.sh
++ grep '<name>' config.xml
++ sed 's@.*<name>\(.*\)</name>.*@@'
+ projectName='Company App'
+ payload='payload={"text":"Company App"}"'
+ echo 'payload={"text":"Company' 'App"}"'
payload={"text":"Company App"}"
+ notifyMattermostOnError
+ curl -i -X POST -d 'payload={"text":"Company' 'App"}"' https://mattermost.company.com/hooks/<key>
curl: (3) [globbing] unmatched close brace/bracket in column 8
问题是负载 json 被拆分为 'payload={"text":"Company'
和 'App"}"'
。我怎样才能防止这种情况发生?我已经在我的字符串周围设置了引号。
最起码要引用参数展开:
curl -i -X POST -d "$payload" https://mattermost.company.com/hooks/<key>
您还应该使用知道如何正确转义字符串以用于 JSON:
的工具payload="payload=$(jq -n --arg pn "$projectName" '{text :$pn}')"
最后,您应该使用了解 XML 的工具来提取项目名称,而不是希望 XML 的格式设置为 grep
可能有效的方式。
projectName=$(xmlstarlet sel -t -v name config.xml)