2014-09-27 5 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

Это нехороший способ управления конфигурациями системы. Рассмотрим что-то вроде «марионетки». – jordanm

ответ

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 

Здесь мы используем @ в качестве разделителя так / символы не должны быть экранированы больше.

Обратите внимание, что вы можете получить sed, чтобы сделать замену на месте с помощью -i, но это, я считаю, является расширением GNU.

0

Для того, чтобы включить новые линии

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

после строки:

include /etc/nginx/mime.types; 

Вы можете использовать sed выражение, которое будет редактировать Nginx.конф рядный (и создать резервную копию оригинала) путем поиска существующей линии include /etc/nginx/mime.types;, а затем заменяя символ новой строки и дополнения вы хотите со следующим:

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

Который создаст nginx.conf.bak держит исходный файл конф и изменить nginx.conf, чтобы он содержал:

include /etc/nginx/mime.types; 
include /etc/nginx/sites-enabled/*; 
include /etc/nginx/sites-available/*; 
Смежные вопросы