Problème avec le script bash shell, tentative de POST de données JSON variable en utilisant cURL

J'ai de la difficulté avec un shell bash script, en essayant de variable POST données JSON à l'aide de cURL. Je suis en cours d'exécution à partir d'un Mac. Je peux comptabiliser correctement les données statiques, mais je n'arrive pas à comprendre comment intégrer les variables.

J'ai introduit <la chambre> et <jeton> pour l'amour de ces exemples.

Ce script fonctionne correctement:

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

Maintenant, je voudrais introduire une date formatée. Ce script postes avec succès, mais le "$" est affiché littéralement: c'est à dire "Build failed $maintenant" plutôt que de "Build failed 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>

J'ai tenté de format de la charge utile JSON avec printf comme si. La date de chaîne est remplacée correctement. Toutefois, il échoue avec un message d'erreur: "le corps de La requête ne peut pas être analysée comme JSON valide: Sans objet JSON peut être décodé: ligne 1, colonne 0 (car 0)" - donc, on dirait que je suis en abuser $de la charge utile.

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

Enfin, j'ai tenté d'eval de la commande entière. Il échoue par pendaison et il se pourrait que je suis en abuser échappe. J'ai essayé de nombreuses variantes de s'échapper.

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

J'ai trouvé ce question à être un peu utile et j'ai aussi lu ce cURL tutoriel. Ils traitent des données statiques et je pense que je suis juste en manque quelques fondamentaux de l'écriture de scripts bash. Je vous remercie d'avance pour votre aide.

source d'informationauteur Davey Johnson