Когда я получаю эхо, я получаю это, которое запускается, когда я вхожу в терминал
curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data '{"account":{"email":"akdgdtk@test.com","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
Но при запуске в файле сценария bash, я получаю эту ошибку
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
это код в файле
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:xxxxx@xxxx-www.xxxxx.com/xxxxx/xxxx/xxxx"
Я предполагаю, что есть проблема с моими кавычками, но я много играл с ними и у меня были похожие ошибки. Все переменные определяются с помощью различных функций в реальном скрипте
источник
EOF
. После удаления все нормально.source my_new_file
чтобы определить функцию в вашей текущей среде. После этого вы можете запустить команду curl, как указано.Решение протестировано с https://httpbin.org/ и встроенным сценарием bash
1. Для переменных без пробелов, то есть
1
:просто добавьте
'
до и после$variable
при замене желаемой строки2. Для ввода с пробелами:
переменная Wrap с дополнительным ,
"
т.е."el a"
:Вау работает :)
источник
$i
содержит пробелы. :(i="a b"
вместо цикла/bin/sh
. Тем не менее, этот ответ сделал свое дело. И это намного проще, чем другие ответы. Спасибо вам большое! Я отредактировал ваш ответ с более приятным форматированием переноса строк. В противном случае, трудно определить блеск. Ура, приятельCurl может публиковать двоичные данные из файла, поэтому я использую подстановку процессов и использую преимущества файловых дескрипторов всякий раз, когда мне нужно опубликовать что-то неприятное с помощью curl и все еще хотеть получить доступ к переменным в текущей оболочке. Что-то вроде:
Это выглядит как,
--data @/dev/fd/<some number>
который просто обрабатывается как обычный файл. В любом случае, если вы хотите, чтобы это работало локально, просто запуститеnc -l 8080
сначала и в другой оболочке запустите вышеуказанную команду. Вы увидите что-то вроде:Как видите, в heredoc вы можете вызывать подоболочки и тому подобное, а также ссылочные переменные. Счастливого взлома надеюсь, что это помогает с
'"'"'""""'''""''
.источник
Несколько лет спустя, но это может помочь кому-то, если вы используете замещение eval или backtick:
Использование sed для удаления цитат из начала и конца ответа
источник
Вот как я должен был использовать это в моем скрипте curl для couchDB. Это действительно очень помогло. Спасибо!
источник
Вот что на самом деле сработало для меня, после указания здесь ответов:
источник
Существующие ответы указывают на то, что curl может отправлять данные из файла и использовать heredocs, чтобы избежать чрезмерного экранирования кавычек и четко разбить JSON на новые строки. Однако нет необходимости определять функцию или захватывать выходные данные из cat, потому что curl может публиковать данные из стандартного ввода. Я нахожу эту форму очень читабельной:
источник