【发布时间】:2020-10-23 18:19:46
【问题描述】:
我正在使用这个 bash 脚本向我的 rocket.chat 实例发布一条新消息。
#!/usr/bin/env bash
function usage {
programName=$0
echo "description: use this program to post messages to Rocket.chat channel"
echo "usage: $programName [-b \"message body\"] [-u \"rocket.chat url\"]"
echo " -b The message body"
echo " -u The rocket.chat hook url to post to"
exit 1
}
while getopts ":b:u:h" opt; do
case ${opt} in
u) rocketUrl="$OPTARG"
;;
b) msgBody="$OPTARG"
;;
h) usage
;;
\?) echo "Invalid option -$OPTARG" >&2
;;
esac
done
if [[ ! "${rocketUrl}" || ! "${msgBody}" ]]; then
echo "all arguments are required"
usage
fi
read -d '' payLoad << EOF
{"text": "${msgBody}"}
EOF
echo $payLoad
statusCode=$(curl \
--write-out %{http_code} \
--silent \
--output /dev/null \
-X POST \
-H 'Content-type: application/json' \
--data "${payLoad}" ${rocketUrl})
echo ${statusCode}
一切正常,所以我可以发送这样的新消息
./postToRocket.sh -b "Hello from here" -u $RocketURL
但是当我尝试添加这样的多行消息时
./postToRocket.sh -b "Hello from here\nThis is a new line" -u $RocketURL
它不起作用。我得到以下输出:
{"text": "Hello from heren New Line"}
200
那么我需要改变什么,才能在这些 bash 脚本中使用换行符。有什么想法吗?
【问题讨论】:
-
这能回答你的问题吗? How to send line break with curl?;查看各种答案,了解有关如何向
curl提交换行符的一些想法 -
部分问题是
read在不与-r一起使用时会破坏反斜杠; 更大的 问题是,即使您没有损坏反斜杠,您的结果仍然不是合法的 JSON,因此不能期望远程服务器接受它。 JSON 文档需要有\n序列,而不是换行符。
标签: bash curl rocket.chat