curl игнорировать --data, начинающиеся со знака @: не читать из файла

curl игнорировать --data, начинающиеся со знака @: не читать из файла

ВслабинаВы можете написать скрипт для Slackbot, который будет публиковать сообщения в канале следующим образом:

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

Теперь я хотел бы упомянуть имя пользователя в первой части сообщения, например msg="@joernhees hello self".

Проблема в том, что если --dataаргумент curl начинается со @знака, он интерпретирует строку после @имени файла и публикует ее содержимое. Есть ли способ заставить curl игнорировать @знак и отправлять литерал @в качестве первого символа запроса post?

решение1

На самом деле я только что узнал, что могу сделать вот так (хотя не уверен, что это лучший вариант):

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

Хитрость заключается в том, чтобы указать curl читать из stdin @-, а затем передать сообщение через него.

решение2

Я знаю, что это старый вопрос, но у меня была та же проблема, и решение оказалось в использовании --data-rawдля обычных ситуаций (см.https://curl.se/docs/manpage.html#--data-raw) или --form-stringдля многокомпонентных данных (см.https://curl.se/docs/manpage.html#--form-string). Таким образом, здесь вы, вероятно, использовали бы:

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

Связанный контент