Cuando hago eco obtengo esto, que se ejecuta cuando lo ingreso en la terminal
curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data '{"account":{"email":"[email protected]","screenName":"akdgdtk","type":"NIKE","passwordSettings":{"password":"Starwars1","passwordConfirm":"Starwars1"}},"firstName":"Test","lastName":"User","middleName":"ObiWan","locale":"en_US","registrationSiteId":"520","receiveEmail":"false","dateOfBirth":"1984-12-25","mobileNumber":"9175555555","gender":"male","fuelActivationDate":"2010-10-22","postalCode":"10022","country":"US","city":"Beverton","state":"OR","bio":"This is a test user","jpFirstNameKana":"unsure","jpLastNameKana":"ofthis","height":"80","weight":"175","distanceUnit":"MILES","weightUnit":"POUNDS","heightUnit":"FT/INCHES"}' https://xxx:xxxxx@xxxx-www.xxxxx.com/xxxxx/xxxx/xxxx
Pero cuando se ejecuta en el archivo de script bash, aparece este error
curl: (6) Could not resolve host: application; nodename nor servname provided, or not known
curl: (6) Could not resolve host: is; nodename nor servname provided, or not known
curl: (6) Could not resolve host: a; nodename nor servname provided, or not known
curl: (6) Could not resolve host: test; nodename nor servname provided, or not known
curl: (3) [globbing] unmatched close brace/bracket at pos 158
este es el código en el archivo
curl -i \
-H '"'Accept: application/json'"' \
-H '"'Content-Type:application/json'"' \
-X POST --data "'"'{"account":{"email":"'$email'","screenName":"'$screenName'","type":"'$theType'","passwordSettings":{"password":"'$password'","passwordConfirm":"'$password'"}},"firstName":"'$firstName'","lastName":"'$lastName'","middleName":"'$middleName'","locale":"'$locale'","registrationSiteId":"'$registrationSiteId'","receiveEmail":"'$receiveEmail'","dateOfBirth":"'$dob'","mobileNumber":"'$mobileNumber'","gender":"'$gender'","fuelActivationDate":"'$fuelActivationDate'","postalCode":"'$postalCode'","country":"'$country'","city":"'$city'","state":"'$state'","bio":"'$bio'","jpFirstNameKana":"'$jpFirstNameKana'","jpLastNameKana":"'$jpLastNameKana'","height":"'$height'","weight":"'$weight'","distanceUnit":"MILES","weightUnit":"POUNDS","heightUnit":"FT/INCHES"}'"'" "https://xxx:[email protected]/xxxxx/xxxx/xxxx"
Supongo que hay un problema con mis comillas, pero he jugado mucho con ellas y he tenido errores similares. Todas las variables se definen con diferentes funciones en el script real.
fuente
EOF
. Después de quitarlo todo está bien.source my_new_file
para definir la función en su entorno actual. Después de eso, puede ejecutar el comando curl como se indica.Solución probada con https://httpbin.org/ y script en línea bash
1. Para variables sin espacios, es decir
1
:simplemente agregue
'
antes y después$variable
al reemplazar la cadena deseada2. Para entrada con espacios:
Ajustar variable con adicional,
"
es decir"el a"
:Wow funciona :)
fuente
$i
contiene espacios. :(i="a b"
en lugar de for-loop/bin/sh
. Sin embargo, esta respuesta hizo el truco. Y es mucho más simple que las otras respuestas. Muchas gracias! He editado tu respuesta con un formato de ajuste de línea más agradable. De lo contrario, es difícil detectar el brillo. Saludos compañeroCurl puede publicar datos binarios de un archivo, por lo que he estado usando la sustitución de procesos y aprovechándome de los descriptores de archivos cada vez que necesito publicar algo desagradable con curl y todavía quiero acceder a los vars en el shell actual. Algo como:
Esto termina pareciendo
--data @/dev/fd/<some number>
que simplemente se procesa como un archivo normal. De todos modos, si quieres verlo funcionar localmente, solo ejecutanc -l 8080
primero y en un shell diferente dispara el comando anterior. Verás algo como:Como puede ver, puede llamar subcapas y demás, así como variables de referencia en el heredoc. Feliz piratería espero que esto ayude con el
'"'"'""""'''""''
.fuente
Unos años de retraso, pero esto podría ayudar a alguien si está utilizando evaluación o sustitución de retroceso:
Uso de sed para eliminar comillas desde el principio y el final de la respuesta
fuente
Así es como tuve que usarlo en mi script curl para couchDB. Realmente ayudó mucho. ¡Gracias!
fuente
Esto es lo que realmente funcionó para mí, después de la orientación de las respuestas aquí:
fuente
Las respuestas existentes señalan que curl puede publicar datos de un archivo, y emplea heredocs para evitar el escape excesivo de comillas y claramente separar el JSON en nuevas líneas. Sin embargo, no es necesario definir una función o capturar la salida de cat, porque curl puede publicar datos desde la entrada estándar. Este formulario me parece muy legible:
fuente