0

sed我编写了一个脚本来自动将 ServerAlias 添加到 Apache 配置文件中,然后重新启动 Apache,对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。

如果你明白我的意思的话,它有效,但并不能真正让妈妈感到自豪。关于如何清理它的任何想法?

4

2 回答 2

3

如果你想在 ServerName 行之后添加一个 ServerAlias 行,为什么不使用 'append' 命令添加一行:

sed '/ServerName site.com/a\
    ServerAlias sub.site.com' tmphost >/etc/httpd/sites/site.conf

额外行的开头有一个“标签”,您似乎需要它。

如果您有 GNU sed,您可以使用该选项而不使用临时文件进行就地编辑-i(但如果您正在编辑的文件有多个硬链接,则不要使用该-i选项,如果它是一个符号链接,则可能不是,或者;请参阅下面来自William Pursell的评论)。

请注意,您应该将代码包装在:

trap "rm -f tmphost; exit 1" 0 1 2 3 13 15
...script manipulating tmphost...
rm -f tmphost
trap 0

因此,如果外壳因信号而退出,则不会留下临时文件。当然,如果您有就地更改,则根本不需要临时文件。

于 2012-09-12T20:42:25.050 回答
0

我喜欢使用 sed 直接添加 ServerAilas 的方式:

sed -i "0,/^ServerName.\+/s//\0\nServerAlias sub.site.com/" /etc/httpd/sites/site.conf
apachectl reload
于 2013-03-25T13:20:55.170 回答