Quand je fais écho, j'obtiens ceci, qui s'exécute quand je le rentre dans le 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
Mais une fois exécuté dans le fichier de script bash, j'obtiens cette erreur
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
c'est le code dans le fichier
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"
Je suppose qu'il y a un problème avec mes guillemets, mais j'ai beaucoup joué avec eux et j'ai eu des erreurs similaires. Toutes les variables sont définies avec différentes fonctions dans le script réel
la source
EOF
. Après l'avoir retiré, tout va bien.source my_new_file
pour définir la fonction dans votre environnement actuel. Après cela, vous pouvez exécuter la commande curl comme indiqué.Solution testée avec https://httpbin.org/ et script bash en ligne
1. Pour les variables sans espaces, c'est-à-dire
1
:ajoutez simplement
'
avant et après$variable
lors du remplacement de la chaîne souhaitée2. Pour une entrée avec des espaces:
Wrap variable avec additionnel
"
ie"el a"
:Wow fonctionne :)
la source
$i
contient des espaces. :(i="a b"
au lieu de for-loop/bin/sh
. Cependant, cette réponse a fait l'affaire. Et c'est beaucoup plus simple que les autres réponses. Merci beaucoup! J'ai modifié votre réponse avec une mise en forme de ligne plus agréable. Sinon, il est difficile de repérer la brillance. Cheers mateCurl peut publier des données binaires à partir d'un fichier.J'ai donc utilisé la substitution de processus et profité des descripteurs de fichier chaque fois que j'ai besoin de publier quelque chose de méchant avec curl et que je veux toujours accéder aux variables dans le shell actuel. Quelque chose comme:
Cela finit par ressembler à celui
--data @/dev/fd/<some number>
qui est simplement traité comme un fichier normal. Quoi qu'il en soit, si vous voulez le voir fonctionner localement, lancez-le d'nc -l 8080
abord et dans un autre shell, lancez la commande ci-dessus. Vous verrez quelque chose comme:Comme vous pouvez le voir, vous pouvez appeler des sous-shell et autres ainsi que des variables de référence dans heredoc. Happy hacking espère que cela aidera avec le
'"'"'""""'''""''
.la source
Quelques années de retard, mais cela pourrait aider quelqu'un si vous utilisez une substitution eval ou backtick:
Utilisation de sed pour supprimer les citations du début et de la fin de la réponse
la source
Voici comment j'ai dû l'utiliser dans mon script curl pour couchDB. Cela a vraiment beaucoup aidé. Merci!
la source
Voici ce qui a réellement fonctionné pour moi, après les conseils des réponses ici:
la source
Les réponses existantes soulignent que curl peut publier des données à partir d'un fichier et utiliser heredocs pour éviter les échappements excessifs des citations et séparer clairement le JSON sur de nouvelles lignes. Cependant, il n'est pas nécessaire de définir une fonction ou de capturer la sortie de cat, car curl peut publier des données à partir d'une entrée standard. Je trouve ce formulaire très lisible:
la source