BASH– 从 PHP 获取结果

BASH–Getting results from PHP

我正在尝试使用 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

可以 "sourced" 由 bash

提前致谢!

这是错误的:RESULT=$($CODE | php) - shell 变量不能像那样传递,它试图将 运行 $CODE 作为命令。

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

使用Here String

php <<< "$CODE"

使用管道

echo "$CODE" | php

如果要将输出存储到变量中,请使用 command substitution:

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

我认为你这里有 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中进行评估。