如果我的构建脚本失败,我想向我们最重要的频道发送通知:
测试.sh
#!/bin/bash
set -eEx
projectName="$(grep '<name>' config.xml | sed "s@.*<name>\(.*\)</name>.*@\1@" | 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>.*@\1@'
+ 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"}"'
. 我怎样才能防止这种情况发生?我已经在我的字符串周围设置了引号。