如何以编程方式通过shell脚本更改php.ini值?

基本上,我试图设置一个shell脚本,让我自动configuration我的新服务器上的一些参数

特别是,我想在php.ini中设置

error_log = /var/log/php_errors.log error_reporting = E_ALL&〜E_NOTICE&〜E_STRICT&〜E_DEPRECATED

在我的bash脚本中,我有这样的:

ERROR_REPORTING="error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED" ERROR_LOG="/var/log/php_errors.log" #CREATE LOG FILE sed -i 's/error_reporting = .*/error_reporting = '${ERROR_REPORTING}'/' /etc/php.ini touch $ERROR_LOG chown apache:apache $ERROR_LOG #The ; in the next line is because the line is commented by default on RHEL5 sed -i 's/;error_log = .*/error_log = '${ERROR_LOG}'/' /etc/php.ini 

但是,这似乎并没有工作,错误是不明显的我..任何人请纠正我的错误?

您需要将最外面的单引号更改为双引号,并删除variables名称周围的单引号。

 ERROR_REPORTING="E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED" ERROR_LOG="/var/log/php_errors.log" #CREATE LOG FILE sed -i "s/error_reporting = .*/error_reporting = ${ERROR_REPORTING}/" /etc/php.ini touch $ERROR_LOG chown apache:apache $ERROR_LOG #The ; in the next line is because the line is commented by default on RHEL5 sed -i "s/;error_log = .*/error_log = ${ERROR_LOG}/" /etc/php.ini 

请注意,我也改变了第一个variables和相关的sed命令,使它与其他组相似。

我假设你得到的错误消息是“未终止的命令”。

sed -i需要一个参数作为它创build的备份文件的后缀。

例如:在编辑原始文件之前, sed -i .bak 's/old/new/' testfile将创build一个备份testfile.bak 。 您的命令将命令string作为备份后缀(自然是失败)。

我也会在命令string上使用双引号。 这将节省你不必在variables扩展周围乱七八糟。