Выберите способ маркировки параметров.Одна возможность - :parameter:
, но любая подобная пара маркеров, которую не следует путать с допустимым текстом для файла (ов) шаблона, хороша.
Написать сценарий sed
(в sed
,awk
, perl
, ...) аналогично следующему:
sed -e "s/:param1:/$param1/g" \
-e "s/:param2:/$param2/g" \
-e "s/:param3:/$param3/g" \
httpd.conf.template > $HTTPDHOME/etc/httpd.conf
Если вы попадаете в точку, где вам иногда нужно что-то редактировать, а иногда нет, вам может показаться, что это прощечтобы создать соответствующие команды sed
в командном файле, а затем выполнить это:
{
echo "s/:param1:/$param1/g"
echo "s/:param2:/$param2/g"
echo "s/:param3:/$param3/g"
if [ "$somevariable" = "somevalue" ]
then echo "s/normaldefault/somethingspecial/g"
fi
} >/tmp/sed.$$
sed -f /tmp/sed.$$ httpd.conf.template > $HTTPDHOME/etc/httpd.conf
Обратите внимание, что вы должны использовать ловушку, чтобы убедиться, что временная программа не утратила свою полезность:
tmp=/tmp/sed.$$ # Consider using more secure alternative schemes
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15 # aka EXIT HUP INT QUIT PIPE TERM
...code above...
rm -f $tmp
trap 0
Это гарантирует, что ваш временный файл будет удален при выходе из сценария для наиболее вероятных сигналов.Вы можете сохранить ненулевой статус выхода из предыдущих команд и использовать exit $exit_status
после команды trap 0
.