2016-11-07 134 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代碼?

所有的一切,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) - shell變量不能像那樣傳遞,它嘗試運行$CODE作爲命令。

相反,你可以做RESULT=$(echo "$CODE" | php)RESULT=$(php <<<"$CODE")

0

我認爲你必須在這裏2個錯誤:在這裏,DOC塊

  1. 錯誤。 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中進行評估。

+1

在Heredoc語句中圍繞PHP使用'''是一件好事。這意味着內容不會受到特殊字符的擴展 - 因此在$'之前不需要添加反斜槓。 –

+1

感謝您的信息。我沒有意識到這一點。永遠不要停止學習。 – cb0