如何在 Bash 中从 PHP 脚本导出变量?
我正在编写一个 Bash 脚本来从config.php
每个网站的文件中读取数据库名称,然后从备份存储库导入数据库。我尝试使用,source config.php
但它似乎无法识别 PHP 变量。
任何帮助,将不胜感激。
答案1
我建议你使用会“做好一件事”(Unix哲学)的程序,在这种情况下使用PHP来解析PHP。您可以从 bash 执行此操作,如下所示:
variable1=$(php -r 'require("input.php"); echo $variable1;')
variable2=$(php -r 'require("input.php"); echo $variable2;')
您可以使用 input.php 文件进行测试,例如:
<?php
$variable1="hello";
$variable2="hello2";
?>
有关 php 文件有返回的示例,请参阅我的答案https://askubuntu.com/a/1469387/766334。
答案2
建立在@Poikilos 的回答:
eval "$(
php -r '
require("config.php");
foreach(get_defined_vars() as $name => $var)
if (is_string($var))
echo "php_", $name, "=", escapeshellarg($var), "\n";
'
)"
$php_varname
将为每个字符串 PHP 变量定义一个shell 变量$varname
。
请注意 PHP 变量中包含 NUL 字节行escapeshellargs()
。
答案3
一个非常简化的版本如下:
2 行config.php
:
cat config.php
$variable1 = 'foo with bar';
$variable1 = 'foo2 with bar2';
将 Bash 设置$variable1
为$variable1
in的最后一个匹配实例config.php
,以防万一它已被重置。如果你想将其更改为第一个匹配项,只需在以下代码中更改tail -1
为:head -1
variable1="$(grep -oE '\$variable1 = .*;' config.php | tail -1 | sed 's/$variable1 = //g;s/;//g')"
通过以下方式确认 Bash 变量echo
:
echo "$variable1"
'foo2 with bar2'
请注意,这主要适用于字符串。有许多类型的 PHP 变量无法直接转换为 Bash 变量。上面的代码将$variable1
获取config.php
.就像我说的,如果该变量已设置多次,您可以通过切换设置该变量的 Bash 命令中的head
或设置为第一个值或最后一个值。tail