Рейтинг:0

bash-скрипт cURL POST добавляет одинарные кавычки к переменным с пробелами

флаг us

Первые 3 переменные всегда будут без пробелов. Четвертый "slacksitename" есть пробелы

ip=âx.x.x.x"
record_name=âdemo.xyz"
slackuri: «WEBHOOK»
slacksitename: «123 Main St»

При вызове с помощью cURL

curl -X POST -H 'Тип содержимого: application/json' --data '{"text":"â$slacksitename': '$ip' '$record_name' DDNS обновлен.â}â $slackuri

Результат выглядит следующим образом:

curl -X POST -H 'Тип содержимого: application/json' --data '{"text":"123' Main 'St: x.x.x.x demo.xyz DDNS обновлен."}' https://hooks.slack.com /услуги/...
curl: (6) Не удалось разрешить хост: Main
curl: (3) непревзойденная закрывающая фигурная скобка/скобка в позиции URL 59:
St: x.x.x.x demo.xyz DDNS обновлен."

Кто-нибудь знает, почему он добавляет одинарные кавычки в 123 'Главная' ул.? И как мне добиться, чтобы вся переменная рассматривалась как одна строка, а не разбивалась (что, я думаю, она и делает)?

Спасибо

ОБНОВЛЕНИЕ: Решено ^^

Следовать за:

Это, вероятно, совпадает с исходным вопросом:

У меня есть переменная, которая представляет собой вывод JSON, который я хочу отправить через cURL. Я предполагаю, что проблема снова в кавычках, но вывод JSON может измениться (количество кавычек). Есть ли способ отправить эти необработанные данные с помощью cURL в сообщении с новой строкой? Спасибо

РЕЗУЛЬТАТЫ СБРОСА:\n{"result":{"id":"ppbkbz2ezmxen11vvpi65chsro1vki5y","zone_id":"unuM0sR1gSrQ37r9fGC1sYKFZOP0DzJM","zone_name":"demo.xyz","name":"1.demo.xyz"," type":"A","content":"x.x.x.x","proxiable":true,"proxyed":false,"ttl":1,"locked":false,"meta":{"auto_added":false, "managed_by_apps":false,"managed_by_argo_tunnel":false,"source":"основной"},"created_on":"2020-06-14T19:13:57.096688Z","modified_on":"2021-10-16T16:57 :49.269274Z"},"успех":истина,"ошибки":[],"сообщения":[]}."
Рейтинг:1
флаг gu

Вы используете переменные без кавычек в bash и выглядите удивленным, что происходит разделение слов. Это то, что должно произойти.

У вас также есть нестандартные кавычки в вашем вопросе, которые, как я предполагаю, связаны с автоматическим форматированием. Но обратите внимание, что " не то же самое, что и ' не то же самое, что ʼ.

curl -X POST -H 'Тип содержимого: application/json' --data '{"text":"â$slacksitename': '$ip' '$record_name' DDNS обновлен.â}â $slackuri

В вашей командной строке вы цитируете {"текст":" и добавление содержимого без кавычек $slacksitename к нему, а значит, на нем будет происходить разбиение слов. Конечным результатом будет 3 отдельных аргумента: {"текст":"123, Главный, Св.. Третий аргумент будет объединен с : который сам будет объединен с содержимым нецитируемого $ip так что мы любые пробелы, присутствующие в этой переменной, произойдет то же самое.

По сути, это bash 101, указывайте ваши переменные, если вы не знаете, что делаете.

northport avatar
флаг us
Спасибо за ответ. ` ` и `ʼ` были по ошибке и на самом деле не в сценарии. Я немного потерялся в том, как решить эту проблему. Я понимаю, что вы говорите о переменных без кавычек, вызывающих проблемы. Но я не уверен, как будет выглядеть правильно цитируемая переменная. Извините, что такой нуб. Не могли бы вы показать мне, как правильно цитировать переменную или указать мне общее направление? Я прочитал это переполнение стека [поток] (https://stackoverflow.com/questions/10067266/when-should-i-wrap-quotes-around-a-shell-variable), и я все еще немного потерян. Спасибо.
Ginnungagap avatar
флаг gu
Если вы запутались в bash, не стесняйтесь обратиться к его [руководству] (https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html), особенно если у вас есть идея, как к тому, что вы ищете.
Ginnungagap avatar
флаг gu
В дополнение к этому, вопрос, на который вы указали, действительно имеет примеры. Итак, что вы пробовали, что не сработало?
northport avatar
флаг us
Спасибо. Мануал помог. Есть какие-нибудь мысли по поводу моего обновления ^^?
Рейтинг:0
флаг es

Единственный способ обойти это, который я могу найти, - сохранить json в файл, а затем сослаться на него в вызове curl -d "@"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.