Ich habe Probleme mit einem Bash-Shell-Skript, versucht, Variable JSON-Daten mit cURL POST. Ich renne von einem Mac. Ich kann statische Daten erfolgreich veröffentlichen, aber ich kann nicht herausfinden, wie man Variablen integriert.Problem mit Bash Shell-Skript versucht POST Variable JSON-Daten mit cURL
Ich habe für diese Beispiele <Raum> und <Token> eingeführt.
Dieses Skript arbeitet erfolgreich:
#!/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>
Nun würde Ich mag eine formatierte Datum einzuführen. Diese Skript Beiträge erfolgreich, aber der „$ jetzt“ wörtlich geschrieben wird: also eher „Build jetzt $ fehlgeschlagen“ als
„Build 2014.10.28 fehlgeschlagen“#!/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>
ich versuchte, die JSON-Nutzlast-Format mit printf wie damit. Die Datumszeichenfolge wird ordnungsgemäß ersetzt. Dies schlägt jedoch mit einem Fehler fehl: "Der Anfragetext kann nicht als gültiger JSON analysiert werden: Es konnte kein JSON-Objekt dekodiert werden: Zeile 1 Spalte 0 (Char 0)" - so scheint es, als würde ich $ Payload missbrauchen.
#!/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>
Schließlich versuchte ich, den gesamten Befehl auszuwerten. Das scheitert am Hängen und es könnte sein, dass ich Fluchten missbrauche. Ich habe viele Fluchtvarianten ausprobiert.
#!/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
Ich fand diese question etwas hilfreich sein, und ich habe auch dieses cURL tutorial lesen. Diese befassen sich mit statischen Daten und ich denke, ich vermisse nur grundlegende Bash Scripting. Vielen Dank im Voraus für Ihre Hilfe.
[Wie verwendet man Zitate in Bash] (http://mywiki.wooled.org/Quotes) – l0b0