Wenn ich ein Echo erhalte, erhalte ich dieses, das ausgeführt wird, wenn ich es in das Terminal eingebe
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
Aber wenn ich in der Bash-Skriptdatei ausgeführt werde, erhalte ich diesen Fehler
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
Dies ist der Code in der Datei
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"
Ich gehe davon aus, dass es ein Problem mit meinen Anführungszeichen gibt, aber ich habe viel mit ihnen gespielt und ähnliche Fehler erhalten. Alle Variablen werden im eigentlichen Skript mit unterschiedlichen Funktionen definiert
quelle
EOF
. Nach dem Entfernen ist alles in Ordnung.source my_new_file
, um die Funktion in Ihrer aktuellen Umgebung zu definieren. Danach können Sie den Befehl curl wie angegeben ausführen.Lösung getestet mit https://httpbin.org/ und Inline-Bash-Skript
1. Für Variablen ohne Leerzeichen, dh
1
:Fügen Sie einfach
'
vor und nach$variable
dem Ersetzen der gewünschten Zeichenfolge hinzu2. Für die Eingabe mit Leerzeichen:
Wrap-Variable mit zusätzlichen
"
dh"el a"
:Wow funktioniert :)
quelle
$i
Leerzeichen enthalten sind. :(i="a b"
statt for-Schleife/bin/sh
. Diese Antwort hat jedoch den Trick getan. Und es ist viel einfacher als die anderen Antworten. Ich danke dir sehr! Ich habe Ihre Antwort mit einer schöneren Formatierung für Zeilenumbrüche bearbeitet. Ansonsten ist die Brillanz schwer zu erkennen. Prost KumpelCurl kann Binärdaten aus einer Datei veröffentlichen, daher habe ich die Prozessersetzung verwendet und Dateideskriptoren verwendet, wenn ich etwas Böses mit Curl veröffentlichen muss und trotzdem Zugriff auf die Variablen in der aktuellen Shell haben möchte. Etwas wie:
Dies sieht
--data @/dev/fd/<some number>
so aus, als würde es wie eine normale Datei verarbeitet. Wie auch immer, wenn Sie möchten, dass es lokal funktioniert, führen Sie esnc -l 8080
zuerst aus und feuern Sie den obigen Befehl in einer anderen Shell ab. Sie werden so etwas sehen wie:Wie Sie sehen können, können Sie im Heredoc Subshells und so weiter sowie Referenz-Vars aufrufen. Happy Hacking hoffe das hilft bei der
'"'"'""""'''""''
.quelle
Ein paar Jahre zu spät, aber dies könnte jemandem helfen, wenn Sie eine Eval- oder Backtick-Substitution verwenden:
Verwenden von sed, um Anführungszeichen vom Anfang und Ende der Antwort zu entfernen
quelle
Hier ist, wie ich es in meinem Curl-Skript für couchDB verwenden musste. Es hat wirklich sehr geholfen. Vielen Dank!
quelle
Folgendes hat bei mir tatsächlich funktioniert, nachdem ich die Antworten hier erhalten habe:
quelle
Bestehende Antworten weisen darauf hin, dass Curl Daten aus einer Datei veröffentlichen und Heredocs einsetzen kann, um zu verhindern, dass übermäßiges Zitat entweicht, und den JSON eindeutig in neue Zeilen aufzuteilen. Es ist jedoch nicht erforderlich, eine Funktion zu definieren oder die Ausgabe von cat zu erfassen, da Curl Daten von der Standardeingabe veröffentlichen kann. Ich finde dieses Formular sehr lesbar:
quelle