InlockerSie können Slackbot so skripten, dass Nachrichten in einem Kanal wie diesem gepostet werden:
curl --data "$msg" $'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random'
Jetzt möchte ich als ersten Teil der Nachricht einen Benutzernamen erwähnen, etwa msg="@joernhees hello self"
:
Das Problem dabei ist, dass --data
curl, wenn das Argument mit einem @
Zeichen beginnt, die Zeichenfolge danach als Dateiname interpretiert @
und deren Inhalt postet. Gibt es eine Möglichkeit, curl dazu zu bringen, das @
Zeichen zu ignorieren und ein Literal als erstes Zeichen einer Post-Anfrage zu senden @
?
Antwort1
Tatsächlich habe ich gerade herausgefunden, dass ich Folgendes tun kann (bin allerdings nicht sicher, ob das die beste Option ist):
curl --data '@-' $'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random' <<< "$msg"
Der Trick besteht darin, curl anzuweisen, von stdin zu lesen @-
und die Nachricht dann darüber weiterzuleiten.
Antwort2
Ich weiß, dass dies eine alte Frage ist, aber ich hatte das gleiche Problem und der Fix erwies sich als --data-raw
für normale Situationen geeignet (siehehttps://curl.se/docs/manpage.html#--data-raw) oder --form-string
für mehrteilige Daten (siehehttps://curl.se/docs/manpage.html#--form-string). Daher würden Sie hier vermutlich verwenden:
curl --data-raw "$msg" 'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random'