Несмотря на то, что вы использовали тег ksh в своем вопросе, сценарий начинается с #! / 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
Обновлено с учетом комментариев и обсуждений в чате.
PHP-код запускает сценарий оболочки как sh./curl.sh $title
, где $title
— переменная PHP (в идеале он должен правильно заключать данные $title
в кавычки, чтобы не путать оболочку ). Поэтому сценарий оболочки должен выбирать заголовок из параметров командной строки $*
, а не из переменной оболочки $title
.
Отправляемый документ JSON заключен в одинарные кавычки, что означает, что расширение переменной $title
не будет видно оболочке.
Вам нужно временно выйти из строки в одинарных кавычках, чтобы расширить переменную:
-d '{ "template_id": "template...{ "text": "'"$*"'" }...
Внешние двойные кавычки в "'"$*"'"
принадлежат документу JSON, содержимое в одинарных кавычках принадлежит оболочке. Внутренние двойные кавычки заключают в кавычки значение $*
(, если оно содержит пробелы и/или шаблоны подстановки имен файлов ).
В коде PHP была дополнительная проблема, из-за которой переменная PHP $title
никогда не устанавливалась должным образом. Когда это было исправлено, все заработало, как и ожидалось.