2016-11-07 3 views
0

Я пытаюсь получить некоторый вывод из php, используя bash. Пока у меня есть это:BASH-получение результатов из PHP

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-код?

В целом, РНР должен генерировать вывод так:

key=value 
key2=value2 

, которые могут быть «исходным кодом» на Баш

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

ответ

2

Использование Here String

php <<< "$CODE" 

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

echo "$CODE" | php 

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

result=$(php <<< "$CODE") 
result=$(echo "$CODE" | php) 
+0

Это более полный ответ, поэтому я выберу его! – philipp

2

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

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

0

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

  1. Ошибка в здесь-док блока. Нет необходимости в ' вокруг PHP.
  2. Вам нужно избегать $ в вашем PHP-коде, иначе он будет расширен bash.

Try:

#!/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.

+1

Наличие '' 'вокруг PHP в инструкции Heredoc - это хорошо. Это означает, что контент не будет подвергаться расширению специальных символов, поэтому не нужно будет добавлять обратную косую черту перед '$'. –

+1

Спасибо за эту информацию. Я не знал об этом. Человек никогда не перестает учиться. – cb0