2014-09-27 51 views
0

我正在编写一个bash脚本,它在服务器上安装了一些元素,并且遇到了问题。使用bash脚本插入行

我正在安装nginx - 默认情况下,它不包含启用网站和网站的功能。

用我的剧本,我就同时创建,并将它们包括在nginx.conf

我使用

mkdir /etc/nginx/sites-available 
mkdir /etc/nginx/sites-enabled 

现在,我已经试过以下明显使目录,但没有成功

sed '/include /etc/nginx/mime.types;/a include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf 

和:

sed 'include /etc/nginx/mime.types;/a include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf 

和:

OLDLINE = 'include /etc/nginx/mime.types;' 
NEWLINE = 'include /etc/nginx/sites-enabled/*;' 

sed 'OLDLINE/a NEWLINE' /etc/nginx/nginx.conf 

和:

OLDLINE = 'include /etc/nginx/mime.types;' 
NEWLINE = 'include /etc/nginx/sites-enabled/*;' 

sed '/OLDLINE/a NEWLINE' /etc/nginx/nginx.conf 

和:

OLDLINE = "include /etc/nginx/mime.types;" 
NEWLINE = "include /etc/nginx/sites-enabled/*;" 

sed 'OLDLINE/a NEWLINE' /etc/nginx/nginx.conf 

我似乎无法弄清楚。

+0

这不是管理系统配置的好方法。考虑一下像“puppet”这样的东西。 – jordanm 2014-09-27 03:39:16

回答

0

sed命令的问题在于这些模式包含与命令分隔符冲突的/字符。 如果你仍然想sed来解决这个问题,简单的解决办法是逃避模式每斜线:

sed '/include \/etc\/nginx\/mime.types;/a include \/etc\/nginx\/sites-enabled\/*;' /etc/nginx/nginx.conf 

但如果你是,就坐落在到toothsaw效果,请尝试强制不同的命令分隔符这样的:

sed '\@include /etc/nginx/mime.types;@a include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf 

这里我们使用@作为分隔符所以/字符不需要再被转义。

请注意,您可以通过-i获得sed进行就地替换,但我相信这是GNU扩展。

0

为了包括新线

include /etc/nginx/sites-enabled/*; 
include /etc/nginx/sites-available/*; 

行后:

include /etc/nginx/mime.types; 

可以使用sed表达式来编辑nginx的。

sed -i.bak '/include \/etc\/nginx\/mime.types;/s|$|\ninclude /etc/nginx/sites-enabled/*;\ninclude /etc/nginx/sites-available/*;|' nginx.conf 

,这将创造nginx.conf.bak保持原来的conf文件:CONF在线通过搜索现有生产线include /etc/nginx/mime.types;,然后代以新行和增加要与以下(与创建原始备份)修改nginx.conf以包含:

include /etc/nginx/mime.types; 
include /etc/nginx/sites-enabled/*; 
include /etc/nginx/sites-available/*;