我正在编写我的第一个BASH脚本来自动配置我的(Laravel)Web项目。
我有一些配置文件(app/config/local/database.php
,app/config/app.php
),我需要访问和修改PHP数组。例如......
'providers' => array(
/** Append new service provider value, if it does not exist already */
'Illuminate\Foundation\Providers\ArtisanServiceProvider',
'Illuminate\Auth\AuthServiceProvider',
// ...
)
......或......
'mysql' => array(
/** Replace value under key "database" to "test_db" */
'database' => 'homestead',
'username' => 'homestead',
)
到目前为止,我正在使用sed
这样的表达式:
$LV_DB_NAME="test_db"
$LV_DB_FILE="app/config/local/database.php"
gsed -i "s/'database' .*/'database' => '$LV_DB_NAME',/g" $LV_FILE_DB_CONFIG
这对我来说有点麻烦,特别是在例1的情况下。
有没有办法让PHP数组到BASH数组并像在PHP中一样工作?
示例1
if (!in_array($new_provider, $providers)) {
$providers[] = $new_provider;
}
示例2
$config['mysql']['database'] = $database_name
如果有任何其他常用方法如何使用终端修改PHP数组,如果你指点我,我会很高兴的!我确定我不是唯一需要使用终端修改PHP配置数组的人。
答案 0 :(得分:1)
php cli
(很可能),您可以轻松地从bash脚本跳转到PHP。有多种方法可以做到这一点,我最终解决了这个问题:
print_s "Putting data to file \"$PATH\" ... "
export PATH=$PATH
export DATA_JSON=$DATA_JSON
/usr/bin/php << 'EOF'
<?php
$path = getenv("PATH");
$data = getenv("DATA_JSON");
$data = json_decode($data);
$config = (file_exists($path) && is_array($config_data = require($path))) ? $config_data : array();
foreach ($data as $k => $v) {
$config[$k] = $v;
}
file_put_contents($path, "<?php \n \n return ".var_export($config,true).";");
?>
EOF
}
在BASH中有一些传递关联数组的问题,请查看我的另一个问题:Pass BASH associative arrays to PHP script