这个问题已经让我苦恼了好几个小时了。我写了一个简单的Perl一行代码封装器来更新一些DNS区域文件中的序列号。
我觉得有必要补充说明:不要提供其他方法来解决这个问题,好吗?这是关于为什么这种方法行不通,而不是如何通过其他方式实现结果。
这是我的简单脚本:
#!/bin/bash
#loop through the supplied files updating the timestamp (serial)
SERIAL=`date +%Y%m%d%H%M`;
for name in $@
do
saCMD="'s/^(\W*)\d*.*;\W*serial/\${1}$SERIAL ; serial/g'"
#echo the command
echo "perl -pi -e "$saCMD" $name"
#execute the command
`perl -pi -e $saCMD $name`
done
我尝试了多种不同的方法,但它要么默默地失败,要么显示以下信息:
“Can't find string terminator "'" anywhere before EOF at -e line 1.”
如果我执行回显的命令,它就能完美运行。
我在Debian 7系统上。
有人可以指出为什么它没有按照我预期的执行吗?
编辑:
一些示例数据。
$TTL 300
domain.org. IN SOA ns1.domain.com. admin.domain.org. (
2014090914 ; serial, todays date+todays
7200 ; refresh, seconds
7200 ; retry, seconds
2419200 ; expire, seconds
3600 ) ; minimum, seconds
需要注意的是这一行:2014090914 ; 串行号,今天的日期+今天