2016-12-14 5 views
0

このbashスクリプトでspeedtest(speedtest-cli)を実行しようとすると、出力をcurl経由でpushbulletに渡します。Bash:コマンド出力がカールエラーに変わる

#!/bin/bash 
speed=$(speedtest --simple) 
curl --header 'Access-Token: <-ACCESS-TOKEN->' \ 
    --header 'Content-Type: application/json' \ 
    --data-binary {"body":"'"$speed"'","title":"SpeedTest","type":"note"}' \ 
    --request POST \ 
    https://api.pushbullet.com/v2/pushes 

他のコマンドは(。whoamiなど)は、このメソッドを使用してうまく機能してきたが、speedtestifconfigはちょうどこのようなエラーを取得:

{"error":{"code":"invalid_request","type":"invalid_request","message":"Failed to decode JSON body.","cat":"(=^‥^=)"},"error_code":"invalid_request"} 

答えて

0

あなたが引用が間違っている:

speed=$(speedtest --simple) 
curl --header 'Access-Token: o.4q87SC5INy6nMQZqVHJeymwRsvMXW74j' \ 
    --header 'Content-Type: application/json' \ 
    --data-binary "{\"body\":\"$speed\",\"title\":\"SpeedTest\",\"type\":\"note\"}" \ 
    --request POST \ 
    https://api.pushbullet.com/v2/pushes 

ここの文書から読むと、引用が簡略化されます。

speed=$(speedtest --simple) 
curl --header 'Access-Token: o.4q87SC5INy6nMQZqVHJeymwRsvMXW74j' \ 
    --header 'Content-Type: application/json' \ 
    --data-binary @- \ 
    --request POST \ 
    https://api.pushbullet.com/v2/pushes <<EOF 
{ "body": "$speed", 
    "title": "SpeedTest", 
    "type": "note" 
} 
EOF 

しかし、一般的には、変数の内容が正しくエンコードされたJSON文字列であると仮定しないでください。jqなどのツールを使用してJSONを生成してください。

jq -n --arg data "$(speedtest --simple)" \ 
    '{body: $data, title: "SpeedTest", type: "note"}' | 
curl --header 'Access-Token: o.4q87SC5INy6nMQZqVHJeymwRsvMXW74j' \ 
     --header 'Content-Type: application/json' \ 
     --data-binary @- \ 
     --request POST \ 
     https://api.pushbullet.com/v2/pushes 

これは簡単にリファクタリングすることができます。

post_data() { 
    url=$1 
    token=$2 
    data=$3 

    jq -n --arg d "$data" \ 
    '{body: $d, title: "SpeedTest", type: "note"}' | 
    curl --header "Access-Token: $token" \ 
     --header 'Content-Type: application/json' \ 
     --data-binary @- \ 
     --request POST \ 
     "$url" 
} 

post_data "https://api.pushbullet.com/v2/pushes" \ 
      "o.4q87SC5INy6nMQZqVHJeymwRsvMXW74j" \ 
      "$(speedtest ---simple)" 
+0

これは動作します! (余分なダッシュが---簡単です)thanx! – zevnyc

+0

この出力を他のテキストと組み合わせるにはどうすればいいですか?body = "ローカルIP:$ iplocal \ nPublic IP:$ ippublic \ nSpeedtest:\ n $ data" – zevnyc

+0

speedtestコマンドを定義して、私は簡単に多くの変数を追加し、体にテストすることができますか? – zevnyc

関連する問題