У меня есть конкретная строка в файле hosts, которая используется для моей локальной установки Wordpress Multisite, которая выглядит следующим образом:

127.0.0.1       localhost domain.dev site1.domain.dev site2.domain.dev

Я пишу сценарий оболочки, который могу запустить для создания нового отдельного сайта в моей мультисайтовой установке прямо из Терминала. Мне нужно иметь возможность добавлять новую запись в мой файл / etc / hosts всякий раз, когда я запускаю эту команду. В файле Shell я использую $site_addr в качестве переменной для имени сайта. Затем вам нужно добавить .domain.dev в конец. Пример, который я сделал (который не сработал) с помощью sed:

sed -i'.bak' '7i7 $site_addr.domain.dev' /etc/hosts

Строка из моего файла hosts (см. Выше), которую мне нужно отредактировать, - это строка 7, следовательно, 7i7 в команде sed. Я хочу добавить новую запись в конец строки. Я также хочу создать резервную копию файла hosts на случай, если что-то пойдет не так.

Спасибо за любую помощь, ребята, надеюсь, я достаточно хорошо объяснил :)

3
Tom Oakley 19 Фев 2014 в 19:26
3
Используйте двойные кавычки .
 – 
devnull
19 Фев 2014 в 19:39

1 ответ

Лучший ответ

Если это строка 7

sed -i '.bak' "7 s/$/ ${site_addr}.domain.dev/" /etc/hosts

Но вы можете использовать сопоставление с образцом (немного безопаснее) с

sed -i '.bak' "/127\.0\.0\.1/ s/$/ ${site_addr}.domain.dev/" /etc/hosts

Я рекомендую также сначала проверить, не находится ли домен еще в

3
Dexygen 26 Апр 2021 в 14:53
Второй работает, но он просто вставляет ${site_addr}.domain.dev вместо переменной, которую я назначаю в Терминале с помощью команды read -p, например read -p "Enter site address: " site_addr. Если я уберу круглые скобки ($site_addr.domain.dev), он просто вставит их. Нужно ли экранировать переменную или что-то в этом роде?
 – 
Tom Oakley
19 Фев 2014 в 19:56
1
Как упоминалось в @devnull в вопросе ... Используйте двойные кавычки ... Переменные не раскрываются внутри одинарных кавычек.
 – 
twalberg
19 Фев 2014 в 20:10
Извините, слишком быстро при редактировании. Сюр двойная кавычка из-за интерпретации $ site, извините, я исправляю
 – 
NeronLeVelu
19 Фев 2014 в 20:14
Ах, что сработало с двойными кавычками, спасибо, ребята :)
 – 
Tom Oakley
19 Фев 2014 в 20:15