#!/bin/bash
timezone=$(cat /etc/sysconfig/clock | sed 's/ZONE=//g')
sed -i "s/;date.timezone = .*/date.timezone = $timezone/g" /etc/php.ini
当我执行它时,我得到了
sed:-e expression#1,char 48:`s'
的未知选项
编辑在我的系统上添加了命令输出**
cat /etc/sysconfig/clock | sed 's/ZONE=//g'
"America/Denver"
最终结果应为
date.timezone = "America/Denver"
答案 0 :(得分:3)
您的时区变量包含' /'在正则表达式上使用不同的分隔符
例如:@
从未在时区中使用过:并且正如@ChrisMaes所说,该文件中可能还有其他您不想要的行。
timezone=$(cat /etc/sysconfig/clock | grep ^ZONE= | sed 's/ZONE=//g')
# thanks Chris
timezone="${timezone//@/\\@}"
# thanks Phillip
sed -i "s@;date.timezone = .*@date.timezone = $timezone@g" /etc/php.ini
答案 1 :(得分:2)
您的timezone
变量包含的斜杠比您想要的要多得多。最好添加一行
echo "$timezone"
在你的sed命令之前首先检查它的内容......
命令的输出
cat /etc/sysconfig/clock | sed 's/ZONE=//g'
给了我/ etc / sysconfig / clock文件的全部内容,只删除了“ZONE =”。所以你的sed表达式将是一个巨大的混乱,因为你的变量timezone
包含许多带有许多斜线等的行......
编辑以解决您的问题我建议您使用@Jasen的答案:您可以使用@
代替/
作为sed的分隔符。