Las primeras 3 variables siempre no tendrán espacios. El cuarto " slacksitename
" tiene espacios
ip=“x.x.x.x"
record_name=“demo.xyz"
slackuri:”WEBHOOK"
slacksitename:”123 Main St"
Cuando se llama con cURL
curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri
El resultado es el siguiente:
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."
¿Alguien sabría por qué se agregan comillas simples 123' Main 'St
? ¿Y cómo conseguiría que tratara toda la variable como una cadena en lugar de dividirla (que es lo que creo que está haciendo)?
Gracias
ACTUALIZACIÓN: Resuelto ^^
Hacer un seguimiento:
Esto probablemente sigue la misma línea de la pregunta original:
Tengo una variable que es una salida JSON que quiero enviar mediante cURL. Supongo que el problema son las comillas nuevamente, pero la salida JSON puede cambiar (Número de comillas). ¿Hay alguna forma de enviar estos datos sin procesar con cURL en el mensaje con una nueva línea? Gracias
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":[]}."
Respuesta1
Estás usando variables sin comillas en bash y pareces sorprendido de que se produzca la división de palabras. Esto es lo que se supone que debe suceder.
También tiene comillas no estándar en su pregunta que supongo que se deben al formato automático. Pero tenga en cuenta que "
no es lo mismo que ”
y '
no es lo mismo que ʼ
.
curl -X POST -H 'Content-type: application/json' --data '{"text":"’$slacksitename': '$ip' '$record_name' DDNS updated.”}’ $slackuri
En su línea de comando, está citando {"text":"
y agregando el contenido sin comillas $slacksitename
, lo que significa que se dividirá la palabra. El resultado final serán 3 argumentos separados: {"text":"123
, Main
, St
. El tercer argumento se concatenará con :
el cual a su vez se concatenará con el contenido del no entrecomillado, $ip
por lo que si hay espacios presentes en esa variable, sucedería lo mismo.
Esto es esencialmente bash 101, cita tus variables a menos que sepas lo que estás haciendo.
Respuesta2
La única forma de solucionar esto que puedo encontrar es guardar el json en un archivo y luego hacer referencia a él en la llamada curl -d "@"
Respuesta3
Solo usa comillas dobles
curl -X POST -H 'Content-type: application/json' -d "$json"