我正在编写我的第一个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 */
'IlluminateFoundationProvidersArtisanServiceProvider',
'IlluminateAuthAuthServiceProvider',
// ...
)
…还是…
'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中那样工作?
示例1if (!in_array($new_provider, $providers)) {
$providers[] = $new_provider;
}
示例2 $config['mysql']['database'] = $database_name
更新:什么也会很棒
如果有任何其他常用的方法如何修改PHP数组使用终端,我将很高兴,如果你指出我!我相信我不是唯一一个需要使用terminal修改PHP配置数组的人。
mTorres其实是对的。如果您的机器安装了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中传递关联数组有一些陷阱,检查我的其他问题:将BASH关联数组传递到PHP脚本