As primeiras 3 variáveis sempre não terão espaços. O quarto " slacksitename
" tem espaços
ip=“x.x.x.x"
record_name=“demo.xyz"
slackuri:”WEBHOOK"
slacksitename:”123 Main St"
Quando chamado com cURL
curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri
A saída é a seguinte:
curl -X POST -H 'Content-type: application/json' --data '{"text":"123' Main 'St: x.x.x.x demo.xyz DDNS updated."}' https://hooks.slack.com/services/……..
curl: (6) Could not resolve host: Main
curl: (3) unmatched close brace/bracket in URL position 59:
St: x.x.x.x demo.xyz DDNS updated."
Alguém saberia por que está adicionando aspas simples a 123' Main 'St
? E como eu conseguiria tratar a variável inteira como uma string em vez de dividi-la (que é o que acho que está fazendo)?
Obrigado
ATUALIZAÇÃO: Resolvido ^^
Seguir:
Isso provavelmente segue as mesmas linhas da pergunta original:
Tenho uma variável que é uma saída JSON que desejo enviar via cURL. Estou assumindo que o problema são as cotações novamente, mas a saída JSON pode mudar (número de cotações). Existe alguma maneira de enviar esses dados brutos com cURL na mensagem com uma nova linha? Obrigado
DUMPING RESULTS:\n{"result":{"id":"ppbkbz2ezmxen11vvpi65chsro1vki5y","zone_id":"unuM0sR1gSrQ37r9fGC1sYKFZOP0DzJM","zone_name":"demo.xyz","name":"1.demo.xyz","type":"A","content":"x.x.x.x","proxiable":true,"proxied":false,"ttl":1,"locked":false,"meta":{"auto_added":false,"managed_by_apps":false,"managed_by_argo_tunnel":false,"source":"primary"},"created_on":"2020-06-14T19:13:57.096688Z","modified_on":"2021-10-16T16:57:49.269274Z"},"success":true,"errors":[],"messages":[]}."
Responder1
Você está usando variáveis sem aspas no bash e parece surpreso com a divisão de palavras. Isto é o que deveria acontecer.
Você também tem citações fora do padrão em sua pergunta, que presumo serem devido à formatação automática. Mas observe que "
não é o mesmo que ”
e '
não é o mesmo que ʼ
.
curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri
Na sua linha de comando, você está citando {"text":"
e anexando o conteúdo não citado $slacksitename
, o que significa que a divisão de palavras ocorrerá nele. O resultado final será 3 argumentos separados: {"text":"123
, Main
, St
. O terceiro argumento será concatenado com :
o qual ele próprio será concatenado com o conteúdo do sem aspas, $ip
portanto, se houver espaços presentes nessa variável, o mesmo aconteceria.
Isto é essencialmente o bash 101, cite suas variáveis, a menos que você saiba o que está fazendo.
Responder2
A única maneira de contornar isso é salvar o json em um arquivo e referenciá-lo na chamada curl -d "@"
Responder3
Basta usar aspas duplas
curl -X POST -H 'Content-type: application/json' -d "$json"