2016-01-05 3 views
0

Я пытаюсь выполнить команду curl, которая использует предопределенную переменную в качестве заголовка.Как передать заголовок в качестве аргумента в команде curl?

header='-H "Content-Type: application/json" -H "userGUID: 7feb6e62-35da-4def-88e9-376e788ffd97" -H "Content-Length: 51"' 

И это, по существу локон команда

curl $header -w "http code: %{http_code}\\n" -X POST -d $BODY $URL 

который затем возвращает сообщение об ошибке

rl: (6) Could not resolve host: application 
curl: (6) Could not resolve host: 7feb6e62-35da-4def-88e9-376e788ffd97" 
curl: (6) Could not resolve host: 51" 

Это работает, как ожидалось

curl -H "Content-Type: application/json" -H "userGUID: 7feb6e62-35da-4def-88e9-376e788ffd97" -H "Content-Length: 51" -w "http code: %{http_code}\\n" -X POST -d $BODY $URL 

Причина Я попытка передать заголовок как переменная, потому что я пишу скрипт, который выполняет цикл и массив, но в настоящее время это не работает с заголовками по какой-то причине. Нет вопросов, передающих аргументы для тела.

+0

Разделение слов делает ваши аргументы заголовка '-H',' "Content-Type:', 'application/json'' и т. Д. Я рекомендую использовать массив для сохранения заголовков. В противном случае вам, вероятно, понадобится 'eval'. – 4ae1e1

+0

Вы выполнили бы команду eval в команде curl? –

ответ

2

Имейте в виду, что переменное расширение в bash может легко захватывать людей.

Очень хорошее эмпирическое правило состоит в том, чтобы поместить двойные кавычки вокруг любой переменной, которую вы хотите развернуть, например, curl '$header' -w 'http code: %{http_code}\\n' -X POST -d '$BOD' '$URL'.

Bash всегда расширяет $SOMETHING переменные, если они появляются сами по себе, или если они отображаются в двойных кавычках. (Не если они появляются в одинарных кавычках).

При расширении с двойными кавычками они рассматриваются как единый «токен» оболочки, несмотря ни на что.

При расширении без двойных кавычек они будут обрабатываться, как если бы вы набрали их содержимое вместо переменной. Итак, если эта переменная имела пробелы, это может означать, что оболочка будет рассматривать их как разделители между аргументами.

+1

Спасибо, это закончилось тем, что исправил его. Заменены двойные кавычки одиночными кавычками. –

Смежные вопросы