如何在bash中从php文件读取变量

如何在bash中从php文件读取变量

如何在 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$variable1in的最后一个匹配实例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

相关内容