2014-09-27 40 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/*;