
BashのPHPスクリプトから変数をエクスポートする方法は?
config.php
各Webサイトのファイルからデータベース名を読み取り、バックアップストアからデータベースをインポートするBashスクリプトを作成しています。私はPHP変数を試してみましたが、source config.php
認識していないようです。
どんな助けでも大変感謝します。
答え1
「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変数に対してシェル変数が定義されています$varname
。
PHP変数にはNULバイト行が含まれていますescapeshellargs()
。
答え3
非常に単純化されたバージョンは次のとおりです。
2行config.php
:
cat config.php
$variable1 = 'foo with bar';
$variable1 = 'foo2 with bar2';
Bashがリセットされた場合は、inの最後の一致インスタンス$variable1
に設定します。最初の一致に変更するには、次のように変更します。$variable1
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'
これは主に文字列に適用されます。 Bash変数に直接変換できないPHP変数の種類がたくさんあります。上記のコードは$variable1
。config.php
変数を複数回設定した場合は、変数を設定するか、head
最初の値または最後の値に設定するBashコマンドを切り替えることで設定できます。tail