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ď č. 1Musí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