Публикация переменной PHP в сценарии bash

Несмотря на то, что вы использовали тег в своем вопросе, сценарий начинается с #! / Bin / sh hashbang, который редко дает вам оболочку korn.

Остальной код отлично работает с ksh (AT&T ksh93) в ubuntu 14.04:

$ ksh poc.sh
98.67
1.33

$ ls -lL /bin/ksh*
-rwxr-xr-x 1 root root 1509040 Jan  9  2013 /bin/ksh
-rwxr-xr-x 1 root root 1509040 Jan  9  2013 /bin/ksh93

0
03.05.2018, 12:18
1 ответ

Обновлено с учетом комментариев и обсуждений в чате.

PHP-код запускает сценарий оболочки как sh./curl.sh $title, где $title— переменная PHP (в идеале он должен правильно заключать данные $titleв кавычки, чтобы не путать оболочку ). Поэтому сценарий оболочки должен выбирать заголовок из параметров командной строки $*, а не из переменной оболочки $title.

Отправляемый документ JSON заключен в одинарные кавычки, что означает, что расширение переменной $titleне будет видно оболочке.

Вам нужно временно выйти из строки в одинарных кавычках, чтобы расширить переменную:

-d '{ "template_id": "template...{ "text": "'"$*"'" }...

Внешние двойные кавычки в "'"$*"'"принадлежат документу JSON, содержимое в одинарных кавычках принадлежит оболочке. Внутренние двойные кавычки заключают в кавычки значение $*(, если оно содержит пробелы и/или шаблоны подстановки имен файлов ).

В коде PHP была дополнительная проблема, из-за которой переменная PHP $titleникогда не устанавливалась должным образом. Когда это было исправлено, все заработало, как и ожидалось.

3
28.01.2020, 02:23

Теги

Похожие вопросы