Interpolar la salida del command en la request REST de GitHub

Intento crear un comentario de request de extracción automáticamente cada vez que se ejecuta CI. La salida de un command dado se escribe en un file (aunque también se puede almacenar dentro de una variable de entorno). El problema es que generalmente recibo la siguiente respuesta:

curl -XPOST -d "{'body':'$RESULT'}" https://api.github.com/repo/name/issues/number/comment { "message": "Problems parsing JSON", "documentation_url": "https://developer.github.com/v3/issues/comments/#create-a-comment" } 

Esto generalmente se debe a caracteres no rellenos, como \n , \t , " etc.

¿Hay alguna manera fácil de lograr esto en la command-line o en bash, sh, con jq o Python? Usar la biblioteca Octokit.rb funciona inmediatamente, pero no quiero instalar Ruby en el entorno de compilation.

Puede usar jq para crear su object JSON. Suponiendo que tiene el contenido de su comentario en la variable RESULT , la request completa sería:

 DATA=$(echo '{}' | jq --arg val "$RESULT" '.| {"body": $val}') curl -s -H 'Content-Type: application/json' \ -H 'Authorization: token YOUR_TOKEN' \ -d "$DATA" \ "https://api.github.com/repos/:owner/:repo/issues/:number/comments" 

La publicación " Usar POST de curl con variables definidas en las funciones de guión bash " propone múltiples técnicas para pasar un varialbe como $ RESULTADO en un parámetro POST de curl.

 generate_post_data() { cat <<EOF { "body": "$RESULT" } EOF } 

Luego, siguiendo " Un curl tutorial usando la API de GitHub ":

 curl -X POST \ -H "authToken: <yourToken" \ -H "Content-Type: application/json" \ --data "$(generate_post_data)" https://api.github.com/repo/name/issues/number/comment