/ / Problémy s skriptom bash shellu, pokúšanie sa premeniť POST premennú JSON dáta pomocou cURL - json, bash, curl, hipchat

Problémy s bash shellovým skriptom, pokúšajúce sa premeniť POST premennú JSON pomocou cURL - json, bash, curl, hipchat

Mám problémy s skriptom bash shellu,pokúšať sa prevádzať dáta s premennou JSON POST pomocou cURL. Spúšťam z počítača Mac.Môžem úspešne zverejniť statické údaje, ale nemôžem zistiť, ako začleniť premenné.

Zaviedol som <room> a <token> kvôli týmto príkladom.

Tento skript funguje úspešne:

#!/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>

Teraz by som chcel predstaviť formátovaný dátum. Tento skript úspešne prebehol, ale "$ now" je uverejnený doslovne: t. J. "Vytvoriť zlyhalo $ now" namiesto "Build failed in 10-28-2014"

#!/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>

Pokúsil som sa formátovať užitočné zaťaženie JSONprintf rád. Dátumový reťazec sa správne nahradí. Toto však zlyhá s chybou: "Žiadosť telo nemožno analyzovať ako platný JSON: Žiadny JSON objekt nemožno dekódovať: riadok 1 stĺpec 0 (char 0)" - tak sa zdá, že zneužívam $ payload.

#!/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>

Nakoniec som sa pokúsil vyhodnotiť celý príkaz. To sa nepodarí visieť a mohlo by to byť zneužitím úteku. Skúšal som veľa variácií úteku.

#!/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

Našiel som to otázka aby som bol trochu užitočný a tiež som si to prečítal cURL tutorial, Tie sa zaoberajú statickými údajmi a myslím si, že mi chýba niektoré základné skripty bash. Ďakujem vopred za vašu pomoc.

odpovede:

23 pre odpoveď č. 1

Musíte len použiť " a " riadne uniknúť:

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>

alebo alternatívne:

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>

Obalové premenné v " bude bash liečiť ich doslova pri použití " ich nahradí hodnotou premennej