2014-10-28 15 views
14

kullanarak POST değişken JSON verilerini kullanmaya çalışırken, bash kabuk betiğiyle sorun yaşıyorum, cURL kullanarak POST değişken JSON verilerini kullanmaya çalışıyorum. Mac’ten kaçıyorum. Statik verileri başarılı bir şekilde yayınlayabilirim ancak değişkenleri nasıl dahil edeceğimi anlayamıyorum. Bu örnekler için, < numaralı oda > ve <token> numaralı ürünleri tanıttım. Bash kabuk betiğiyle ilgili sorun, cURL

Bu komut dosyası

başarıyla çalışır:

#!/bin/bash 
curl -X POST -H "Content-Type: application/json" --data '{ "color":"red", "message":"Build failed", "message_format":"text" }' https://api.hipchat.com/v2/room/<room>/notification?auth_token=<token> 

Şimdi, bir biçimlendirilmiş tarihi tanıtmak istiyoruz. Başarıyla Bu komut dosyası mesajlar, ama "$ artık" tam anlamıyla nakledilir: yani "Yapı 10-28-2014 başarısız" yerine "Yapı şimdi $ başarısız oldu"

#!/bin/bash 
now=$(date +"%m-%d-%Y") 
curl -X POST -H "Content-Type: application/json" --data '{ "color":"red", "message":"Build failed $now", "message_format":"text" }' https://api.hipchat.com/v2/room/<room>/notification?auth_token=<token> 

Ben printf gibi olan JSON yükü biçimlendirmek için çalıştı yani. Tarih dizgisi gerektiği gibi değiştirilir. Ancak, bu bir hatayla başarısız olur: "İstek gövdesi geçerli bir JSON olarak ayrıştırılamıyor: JSON nesnesi kodu çözülemiyor: satır 1 sütun 0 (karakter 0)" - bu yüzden, yük yükünü yanlış kullanıyorum gibi görünüyor.

#!/bin/bash 
now=$(date +"%m-%d-%Y") 
payload=$(printf "\'{\"color\":\"red\",\"message\":\"Build failed %s\",\"message_format\":\"text\"}\'" $now) 
curl -X POST -H "Content-Type: application/json" --data $payload https://api.hipchat.com/v2/room/<room>/notification?auth_token=<token> 

Son olarak, tüm komutu değerlendirmeyi denedim. Bu askıda kalıyor ve yanlış kullanımları kaçırıyor olabilirim. Kaçma çeşitlerini denedim.

#!/bin/bash 
now=$(date +"%m-%d-%Y") 
payload=$(printf "\'{\"color\":\"red\",\"message\":\"Build failed %s\",\"message_format\":\"text\"}\'" $now) 
cmd=$(curl -X POST -H \"Content-Type: application\/json\" --data '{\"color\":\"red\",\"message\":\"Build failed $now\",\"message_format\":\"text\"}' https:\/\/api.hipchat.com\/v2\/room\/<room>\/notification?auth_token=<token>) 
eval $cmd 

Bu question biraz yardımcı olmak için buldum ve ettik de bu cURL tutorial okuyun. Bunlar statik verilerle uğraşıyor ve sanırım bazı temel bash komut dosyalarını kaçırıyorum. Yardımınız için şimdiden teşekkür ederim.

+1

[Bash'deki alıntılar nasıl kullanılır] (http://mywiki.wooledge.org/Quotes) – l0b0

cevap

23

sadece ' kullanmak gerekir ve düzgün kaçış ":

now=$(date +"%m-%d-%Y") 
curl -X POST -H "Content-Type: application/json" \ 
    --data '{ "color":"red", "message":"Build failed '"$now"'", "message_format":"text" }' \ 
    https://api.hipchat.com/v2/room/<room>/notification?auth_token=<token> 

veya alternatif: ' yılında

now=$(date +"%m-%d-%Y") 
curl -X POST -H "Content-Type: application/json" \ 
    --data "{ \"color\":\"red\", \"message\":\"Build failed $now\", \"message_format\":\"text\" }" \ 
    https://api.hipchat.com/v2/room/<room>/notification?auth_token=<token> 

Paketleme değişkenleri bash " kullanarak onları yerini yapacak oysa bunları tam anlamıyla tedavi yapacak değişkenin değeri