2017-02-25 20 views
1

私はOpenWRTでルータ上で動作するスクリプトを開発しようとしています。今私はルータのIPを取得することができます。 Firebaseにアップロードしたいだけです。変数をCURLに渡す(Firebase REST API)

curl -X PUT -d '{"IPv4": "192.168.1.1"}' \ 
    'https://name.firebaseio.com/Values.json' 

私は何を知ってやりたいことは入力としてIP値を渡すことです:

var=$(/sbin/ifconfig eth0 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}'); 
curl -X PUT -d '{"IPv4": '"${var}"'}' \ 
     'https://name.firebaseio.com/Values.json' 

私はこれを実行する場合、私はパースエラーを取得し、私はそれをデータベースに書き込まれます以下ならば:あなたは${var}周りに二重引用符の前にバックスラッシュを置けば

{ 
    "error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names." 
} 

答えて

1

あなたcurl呼び出しが動作します:

curl -X PUT -d '{"IPv4": '\"${var}\"'}' \ 
     'https://name.firebaseio.com/Values.json' 

以上、単に二重引用符で全体-d引数を入れて、そして使用が内部の二重引用符をバックスラッシュ:

対照的に
curl -X PUT -d "{\"IPv4\": \"${var}\"}" \ 
     'https://name.firebaseio.com/Values.json' 

、それは問題でフォーマットの道は、var値はで引用符で囲まれていない送信されますあなたのJSON:、それはJSONパーサは(ない文字列ではなく、番号ではなく、オブジェクトではなく、配列ではなく、true/認識値型の引用符なし

$ curl --trace-ascii - -X PUT -d '{"IPv4": '"${var}"'}' \ 
     'https://name.firebaseio.com/Values.json' 

== Info: Trying 104.154.130.226... 
== Info: TCP_NODELAY set 
== Info: Connected to name.firebaseio.com (104.154.130.226) port 443 (#0) 
== Info: TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 
== Info: Server certificate: firebaseio.com 
== Info: Server certificate: Google Internet Authority G2 
== Info: Server certificate: GeoTrust Global CA 
=> Send header, 163 bytes (0xa3) 
0000: PUT /Values.json HTTP/1.1 
001b: Host: name.firebaseio.com 
0036: User-Agent: curl/7.51.0 
004f: Accept: */* 
005c: Content-Length: 25 
0070: Content-Type: application/x-www-form-urlencoded 
00a1: 
=> Send data, 25 bytes (0x19) 
0000: {"IPv4": 192.168.111.100} 
       ^^^^^^^^^^^^^^^ 

ではありません、null)、解析が失敗します。

関連する問題