我编写了一个脚本来自动将ServerAlias添加到Apache配置文件中,然后重新启动Apache,对sed
和tr
有一个相当补救的理解,并且通常可能是shell脚本。这就是我想出的:
cp /etc/httpd/sites/site.conf tmphost &&
sed s/ServerName\ site.com/ServerName\ site.com^#ServerAlias\ sub.site.com/ \
tmphost |
tr '^#' '\n\t' >/etc/httpd/sites/site.conf &&
rm -f tmphost &&
apachectl restart
基本上我正在创建一个副本,用自己替换ServerName行+新别名,使用tr
放入换行符和标签(sed
对此有点奇怪?),覆盖旧的配置文件,删除副本,然后重新启动Apache。
它有效,但如果你知道我的意思,那真的不会让妈妈感到骄傲。关于如何清理它的任何想法?
答案 0 :(得分:3)
如果要在ServerName行之后添加ServerAlias行,为什么不使用'append'命令添加一行:
sed '/ServerName site.com/a\
ServerAlias sub.site.com' tmphost >/etc/httpd/sites/site.conf
在额外线的开头有一个'标签',你似乎需要它。
如果你有GNU sed,你可以使用-i
选项进行就地编辑而不使用临时文件(但如果你正在编辑的文件有-i
选项,则不要使用trap "rm -f tmphost; exit 1" 0 1 2 3 13 15
...script manipulating tmphost...
rm -f tmphost
trap 0
选项多个硬链接,如果它是符号链接,也可能不是;请参阅以下William Pursell中的评论。
请注意,您应该将代码包装在:
中{{1}}
如果shell因信号退出,则不会留下临时文件。当然,如果你有一个就地改变,你根本不需要临时文件。
答案 1 :(得分:0)
我喜欢使用sed直接添加ServerAilas的方式:
sed -i "0,/^ServerName.\+/s//\0\nServerAlias sub.site.com/" /etc/httpd/sites/site.conf
apachectl reload