Kiedy powtarzam echo, otrzymuję to, które działa, gdy wprowadzam go do terminala
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
Ale po uruchomieniu w pliku skryptu bash otrzymuję ten błąd
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
to jest kod w pliku
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"
Zakładam, że wystąpił problem z moimi cudzysłowami, ale często się z nimi bawiłem i otrzymałem podobne błędy. Wszystkie zmienne mają zdefiniowane różne funkcje w rzeczywistym skrypcie
źródło
EOF
. Po wyjęciu wszystko jest w porządku.source my_new_file
aby zdefiniować funkcję w bieżącym środowisku. Następnie możesz uruchomić polecenie curl, jak wskazano.Rozwiązanie przetestowane za pomocą https://httpbin.org/ i wbudowanego skryptu bash
1. Dla zmiennych bez spacji, tj .
1
:Po prostu dodaj
'
przed i po$variable
podczas zastępowania żądanego ciągu2. Dla wprowadzenia ze spacjami:
Zawiń zmienną dodatkowymi
"
np ."el a"
:Wow działa :)
źródło
$i
zawiera spacje. :(i="a b"
zamiast pętli for/bin/sh
. Jednak ta odpowiedź załatwiła sprawę. Jest to znacznie prostsze niż inne odpowiedzi. Dziękuję bardzo! Zredagowałem twoją odpowiedź z ładniejszym formatowaniem zawijania linii. W przeciwnym razie trudno dostrzec blask. Cheers mateCurl może wysyłać dane binarne z pliku, więc korzystałem z podstawiania procesów i deskryptorów plików, gdy chcę opublikować coś paskudnego z curl i nadal chcę mieć dostęp do zmiennych w bieżącej powłoce. Coś jak:
Kończy się to wyglądem,
--data @/dev/fd/<some number>
który jest przetwarzany jak normalny plik. W każdym razie, jeśli chcesz zobaczyć, jak działa lokalnie, po prostu uruchomnc -l 8080
najpierw i w innej powłoce odpal powyższe polecenie. Zobaczysz coś takiego:Jak widać, w heredoc można wywoływać podpowłoki i tak dalej, jak również zmienne odniesienia. Miłego hakowania, mam nadzieję, że to pomoże w rozwiązaniu
'"'"'""""'''""''
.źródło
Kilka lat później, ale może to pomóc komuś, jeśli używasz zamiany eval lub backtick:
Używanie seda do usuwania cytatów z początku i końca odpowiedzi
źródło
Oto, jak musiałem go użyć w moim skrypcie curl dla couchDB. To naprawdę bardzo pomogło. Dzięki!
źródło
Oto, co faktycznie zadziałało dla mnie, po wskazówkach z odpowiedzi tutaj:
źródło
Istniejące odpowiedzi wskazują, że curl może publikować dane z pliku i wykorzystywać heredoc, aby uniknąć nadmiernego ucieczki cytatów i wyraźnie podzielić JSON na nowe linie. Jednak nie ma potrzeby definiowania funkcji ani przechwytywania danych wyjściowych z cat, ponieważ curl może wysyłać dane ze standardowego wejścia. Uważam, że ten formularz jest bardzo czytelny:
źródło