基本上,我正在尝试设置一个 shell 脚本,以便我在新服务器上自动配置一些参数
具体来说,我想在 php.ini 中设置
错误日志 = /var/log/php_errors.log 错误报告 = 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
但是,这似乎不起作用,而且错误对我来说并不明显。有人可以纠正我的错误吗?
答案1
您需要将最外层的单引号更改为双引号,并删除变量名周围的单引号。
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
请注意,我还更改了第一个变量和相关sed
命令,以便它与另一组平行。
我假设您收到的错误消息是“未终止的`s'命令”。
答案2
sed -i
需要一个参数,用作其创建的备份文件的后缀。
例如:将在编辑原始内容之前sed -i .bak 's/old/new/' testfile
创建备份。您的命令将命令字符串作为备份后缀(并且自然会失败)。testfile.bak
我还会在命令字符串中使用双引号。这样你就不用在变量扩展周围乱用额外的单引号了。