curl ignore --data starting with @ sign: nicht aus der Datei lesen

curl ignore --data starting with @ sign: nicht aus der Datei lesen

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 --datacurl, 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-rawfür normale Situationen geeignet (siehehttps://curl.se/docs/manpage.html#--data-raw) oder --form-stringfü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'

verwandte Informationen