Я пытаюсь получить вывод из php, используя bash. Пока у меня есть это:
CODE="<?php chdir('$WWW');" # $WWW should be interpolated
CODE+=$(cat <<'PHP' # no interpolation for the rest of the code
require_once('./settings.php');
$db = $databases['default']['default'];
$out = [
'user=' . $db['username']
//more here
];
echo implode("\n", $out)
PHP)
echo $CODE
#RESULT=$($CODE | php)
#. $RESULT
В общем, у меня проблемы с интерполяцией строк. Прямо сейчас я получаю:
line 10: <?php: command not found
Так как я могу правильно экранировать строку, чтобы весь код php?
В общем, PHP должен генерировать вывод, как это:
key=value
key2=value2
который может быть «получен» от bash
Спасибо впереди!
С помощью Здесь Строка
php <<< "$CODE"
Использование трубы
echo "$CODE" | php
Если вы хотите сохранить вывод в переменную, используйте подстановка команд:
result=$(php <<< "$CODE")
result=$(echo "$CODE" | php)
Это не верно: RESULT=$($CODE | php)
— переменная оболочки не может быть передана таким образом, она пытается запустить $CODE
как команда.
Вместо этого вы можете сделать RESULT=$(echo "$CODE" | php)
или же RESULT=$(php <<<"$CODE")
Я думаю, что у вас есть 2 ошибки здесь:
'
вокруг PHP. $
в вашем коде PHP, или иначе он будет расширен с помощью bash.Пытаться:
#!/bin/bash
CODE="<?php chdir('$WWW');" # $WWW should be interpolated
CODE+=$(cat << PHP # no interpolation for the rest of the code
//require_once('./settings.php');
\$db = "foo";
\$out = [
'user=' . \$db
//more here
];
echo implode("\n", \$out)
PHP
)
echo $CODE
Это распечатает:
<?php chdir("/tmp"); //require_once('./settings.php'); $db = "foo"; $out = [ 'user=' . $db //more here ]; echo implode("\n", $out);
Который можно оценить в php.