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")
php <<< "$CODE"
使用管道
echo "$CODE" | php
如果要将输出存储到变量中,请使用 command substitution:
result=$(php <<< "$CODE")
result=$(echo "$CODE" | php)
我认为你这里有 2 个错误:
- 您的 here-doc 块中有错误。 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中进行评估。
我正在尝试使用 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")
php <<< "$CODE"
使用管道
echo "$CODE" | php
如果要将输出存储到变量中,请使用 command substitution:
result=$(php <<< "$CODE")
result=$(echo "$CODE" | php)
我认为你这里有 2 个错误:
- 您的 here-doc 块中有错误。 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中进行评估。