BASH — получение результатов от переполнения стека

Я пытаюсь получить вывод из 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

Спасибо впереди!

0

Решение

С помощью Здесь Строка

php <<< "$CODE"

Использование трубы

echo "$CODE" | php

Если вы хотите сохранить вывод в переменную, используйте подстановка команд:

result=$(php <<< "$CODE")
result=$(echo "$CODE" | php)
2

Другие решения

Это не верно: RESULT=$($CODE | php) — переменная оболочки не может быть передана таким образом, она пытается запустить $CODE как команда.

Вместо этого вы можете сделать RESULT=$(echo "$CODE" | php) или же RESULT=$(php <<<"$CODE")

2

Я думаю, что у вас есть 2 ошибки здесь:

  1. ошибка в вашем блоке here-doc. Нет необходимости ' вокруг PHP.
  2. Вам нужно сбежать $ в вашем коде 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.

0
По вопросам рекламы [email protected]