Error de gloing de script de Bash al hacer un curl para la API CLI de Github personalizada con el encabezado de token oAuth

Tengo este script bash que escribí que me permite abrir un nuevo repository git de la terminal para no tener que visitar el sitio.

Estuve atascado durante horas ayer por la noche tratando de enviar los parameters de oAuth en el encabezado curl de esta manera: curl -H "Authorization: token FOO-TOKEN-HERE" https://api.github.com/user/repos -d '{"name":"my-new-repo-name"}'

La cadena del token se almacena en un file y se asigna a una variable con una function grep llamada $(secret NAME-OF-SECRET-VARIABLE) .

Traté de escaping las comillas dobles, pero seguí recibiendo errores de Github.

Luego imprimí la url final que me enviaban a Github, y era un formatting 100% correcto (en mi extremo). Copié la URL y solo pegué en la terminal y funcionó. Pero no funcionará desde el script de shell.

Este es el guion.

  createNewRepo() { local gitUserName gitAuthToken gitNewRepoName gitOriginUrl token gitUserName=$(git config --get user.name) gitPassword=$(secret gitPassword) gitAuthToken=$(secret githubApiAuthToken) gitNewRepoName=$(echo "$@" | sed 's/ /-/g') token=$(secret githubApiPlainAuthToken) gitOriginUrl=git@github.com:$gitUserName/$gitNewRepoName.git apiUrlBuilder $gitUserName $gitAuthToken $gitNewRepoName $gitOriginUrl $token } apiUrlBuilder() { local statusCode date gitRepoUrl="https://api.github.com/repos/$gitUserName/$gitNewRepoName" repo="{\"name\":\"$gitNewRepoName\"}" api="-g -u $gitUserName:$gitPassword -X POST https://api.github.com/user/repos -d $repo" curl $api } 

Como puedes ver. Cambié a usar la opción -u y eso funciona. Pero quiero usar el token de Oauth en el encabezado.

El error que seguí recibiendo fue similar a esto. Solo el número de columna cambió una vez. [globbing] unmatched close brace/bracket in column 1

Esta es una de las forms en que traté de crear la url.

 repo="{\"name\":\"$gitNewRepoName\"}" api="-H $githubAuthToken https://api.github.com/user/repos -d $repo" 

Para la variable repo. Intenté encapsular la variable –data (también conocida como " repo ") entre comillas simples y dobles.

Ninguno funcionó.

¡Cualquier ayuda sería genial! Gracias.

No deberías meter arguments en una cadena. Deberías usar una matriz en su lugar. A menudo es imposible get las citas correctas cuando se usa una cadena.

Consulte http://mywiki.wooledge.org/BashFAQ/050 para get detalles sobre este tema.

Entonces, en este caso, debes intentar algo como esto en su lugar:

 repo='{"name":"'"$gitNewRepoName"'"}' api=(-g -u "$gitUserName:$gitPassword" -X POST https://api.github.com/user/repos -d "$repo") curl "${api[@]}" 

Es posible que también necesite codificar en la URL los contenidos de $repo antes de poder enviarlos, pero no estoy seguro.