Você precisa codificar os dados em url, e a maneira mais fácil de fazer isso é obter curl
, substituindo a opção -d
por --data-urlencode
.
Além disso, você precisa usar aspas duplas ou o shell não expandirá a variável, então temos
curl \
-H "Accept: application/json" \
-X POST \
--data-urlencode "${payload}" \
https://hooks.slack.com/services/xxxx
Você também pode simplificar a configuração de payload=
tendo parte da string entre aspas simples e parte entre aspas duplas, desde que não haja espaço entre aspas
as partes, como em '...'"..."'...'
. Então, nós conseguimos
payload='payload={"channel": "#my_channel", "username": "Bot", "text": "'"${data}"'", "icon_emoji": ":ghost:"}'
Provavelmente você precisa escapar das aspas duplas em data
, talvez com \
, pois elas estarão dentro de ""
em uma cadeia json.
data='Something \"&\" and something do \" \"'
Se você leu seus dados da entrada na variável line
, você pode fazer essa substituição com o bash:
line=${line//\"/\\"}