curl ignore --data 以@符号开头:不要从文件中读取

curl ignore --data starting with @ sign: don't read from file

slack 中,您可以编写 slackbot 脚本,将 post 消息发送到这样的频道:

curl --data "$msg" $'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random'

现在我想在消息的第一部分提到用户名,例如 msg="@joernhees hello self"

问题在于,如果 curl 的 --data 参数以 @ 符号开头,它将把 @ 之后的字符串解释为文件名,而 post它的内容。有没有办法让 curl 忽略 @ 符号并发送文字 @ 作为 post 请求的第一个字符?

实际上我刚刚发现我可以做到这一点(虽然不确定这是最好的选择):

curl --data '@-' $'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random' <<< "$msg"

诀窍是告诉 curl 从标准输入 @- 读取,然后通过它传递消息。

如果您使用的是新版本的 cURL,您还可以使用 --data-raw 选项:

http://curl.haxx.se/docs/manpage.html#--data-raw

请注意,我的笔记本电脑看起来 Yosemite 附带旧版本的 cURL。

一般来说,如果您正在为 post 创建 Slack 工具,我建议您在脚本中使用 HTTP 库,而不是调用 shell 并调用 curl命令。