WebDev2030
@WebDev2030
Битриксоид до мозга и костей

Как скопировать файл с заменой в нем некоторых участков?

Всем привет. Есть настроенный сервер. И файлы для виртуальных хостов. Хочу сделать скриптик который запрашивает у пользователя несколько параметров и потом копирует файлы для хоста с заменой некоторых значений в нем. Подскажите как такое можно сделать. В частности замена внутри файла.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
WebDev2030
@WebDev2030 Автор вопроса
Битриксоид до мозга и костей
В общем нашел решение тут. Использую команду утилиту sed.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Кажется вам нужен не скриптик. Нужно освоить, например, Ansible и использовать шаблоны конфигурационных файлов.
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
замена внутри файла

Я использую для этого такую конструкцию:
#! /bin/bash

subst()
{
	eval "cat <<EOF
`cat \"$1\"`
EOF"
}

. ./config
subst ./dhcpd.conf.in > ./dhcpd.conf


При этом dhcpd.conf.in выглядит так:
ddns-update-style interim;
ignore client-updates;

subnet ${NET}.0 netmask 255.255.255.0 {
        option routers                  ${NET}.1;
        option subnet-mask              255.255.255.0;

        option domain-name-servers      192.168.248.21;

        option root-path                "${NET}.1:/tftpboot/tensilica/rootfs/${ROOTFS}${NFS_MOUNT_OPTIONS}";

        range dynamic-bootp ${NET}.128 ${NET}.128;
        default-lease-time 21600;
        max-lease-time 43200;
}

а config -- так:
NET=192.168.135
ROOTFS=cp0_latest
NFS_MOUNT_OPTIONS=${NFS_MOUNT_OPTIONS},noac
IF_CONFIG="$NET.1 up"
CONFIG=debug-kc705-cp0_latest
KERNEL_IMAGE=uImage


Т.е. в функции subst внутренний cat подставляет тело файла-шиблона, а eval выполняет внешний cat с подстановкой shell-переменных, зачитанных из config. Нужно понимать, что и шаблон и конфиг в этом скрипте могут выполнять произвольные команды, т.е. нельзя их брать у недоверенного пользователя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы