Ketika saya echo saya mendapatkan ini, yang berjalan ketika saya memasukkannya ke 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
Tetapi ketika dijalankan dalam file skrip bash, saya mendapatkan kesalahan ini
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
ini kode dalam file
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"
Saya berasumsi ada masalah dengan tanda kutip saya, tapi saya sering bermain dengan mereka dan saya mendapatkan kesalahan yang sama. Semua variabel didefinisikan dengan berbagai fungsi dalam skrip aktual
sumber
EOF
. Setelah menghapus semuanya baik-baik saja.source my_new_file
untuk menentukan fungsi di lingkungan Anda saat ini. Setelah itu Anda dapat menjalankan perintah curl seperti yang ditunjukkan.Solusi diuji dengan https://httpbin.org/ dan skrip inline bash
1. Untuk variabel tanpa spasi di dalamnya yaitu
1
:Cukup tambahkan
'
sebelum dan sesudah$variable
ketika mengganti string yang diinginkan2. Untuk input dengan spasi:
Bungkus variabel dengan tambahan
"
yaitu"el a"
:Wow berhasil :)
sumber
$i
berisi spasi. :(i="a b"
bukannya for-loop/bin/sh
. Namun, jawaban ini berhasil. Dan itu jauh lebih sederhana daripada jawaban lainnya. Terima kasih banyak! Saya telah mengedit jawaban Anda dengan beberapa format pembungkus baris yang lebih bagus. Kalau tidak, sulit untuk menemukan kecemerlangannya. Cheers mateCurl dapat memposting data biner dari file jadi saya telah menggunakan proses substitusi dan memanfaatkan deskriptor file setiap kali saya perlu memposting sesuatu yang buruk dengan curl dan masih ingin akses ke vars di shell saat ini. Sesuatu seperti:
Ini akhirnya tampak seperti
--data @/dev/fd/<some number>
yang baru saja diproses seperti file normal. Pokoknya jika Anda ingin melihatnya berfungsi secara lokal jalankan sajanc -l 8080
terlebih dahulu dan dalam shell yang berbeda dari perintah di atas. Anda akan melihat sesuatu seperti:Seperti yang Anda lihat, Anda dapat memanggil subshell dan yang lainnya serta vars referensi di heredoc. Selamat hacking, harap ini membantu
'"'"'""""'''""''
.sumber
Beberapa tahun terlambat tetapi ini mungkin membantu seseorang jika Anda menggunakan pengganti eval atau backtick:
Menggunakan tanda kutip untuk mengutip dari awal dan akhir respons
sumber
Inilah cara saya harus menggunakannya dalam skrip ikal saya untuk couchDB. Ini sangat membantu. Terima kasih!
sumber
Inilah yang sebenarnya bekerja untuk saya, setelah bimbingan dari jawaban di sini:
sumber
Jawaban yang ada menunjukkan bahwa curl dapat memposting data dari file, dan menggunakan heredocs untuk menghindari kutipan berlebihan yang keluar dan dengan jelas memecah JSON ke baris baru. Namun tidak perlu mendefinisikan fungsi atau menangkap output dari cat, karena curl dapat memposting data dari input standar. Saya menemukan formulir ini sangat mudah dibaca:
sumber