Пробел в значении заголовка при использовании curl в скрипте bash - PullRequest
0 голосов
/ 17 апреля 2020

Я получаю следующую ошибку

curl: (6) Не удалось разрешить хост: someToken "

#!/bin/bash
HOST_URL='http://google.com'

AUTH_TOKEN='someToken'

#echo $payload
payload='{}'
authHeader='"Authorization:Bearer '$AUTH_TOKEN'"'
curlcmd='curl -X POST '$HOST_URL' --data ''"'$payload'"''  -H "Content-Type:application/json"  -H  '$authHeader
echo $curlcmd
echo $($curlcmd)

Но когда я запускаю точную строку, которая выводится в $ curlcmd, он отлично работает прямо на терминале

curl -X POST http://google.com --data "{}" -H "Content-Type:application/json" -H "Authorization:Bearer someToken"

Я думаю, что это из-за пробела между "Bearer" и "someToken", нам нужно бежать?

1 Ответ

2 голосов
/ 17 апреля 2020

Общее правило в bash - никогда не пытайтесь использовать переменную в качестве заполнителя для хранения ваших команд, а затем запускать команду из нее. Это подробно описано в BashFAQ / 50 - я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу!

По мере использования новых кавычек ваша команда будет трудно поддерживать. Самое простое решение - использовать массивы. Однако для вашего случая тщательное вложение решит проблему.

payload='{}'
hostURL='http://google.com'
authToken='someToken'
authHeader='Authorization:Bearer "'"$authToken"'"'

теперь, когда переменные определены, определите массив для хранения ваших командных аргументов

curlCMD=(-X POST "$hostURL" --data "$payload" -H "Content-Type:application/json" -H "$authHeader")

и теперь сделайте правильные кавычки расширение

curl "${curlCMD[@]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...