选择标记参数的方式。一种可能性是: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
注意,你应该使用一个陷阱,以保证临时不Ø utlive它的用处:
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
这可确保当脚本退出的最可信的信号,您的临时文件将被删除。您可以保留以前命令的非零退出状态,并在trap 0
命令后面使用exit $exit_status
。
分开保存原型httpd.conf文件,并让脚本在运行时将模板(原型)文件编辑到实际文件中。当然,这意味着需要两个文件 - 脚本和模板。但它保持两个逻辑上不相交的文件实际上是不相交的。 – 2012-01-12 19:40:21
是的,这就是我所问(抱歉,如果不明确),但我需要知道如何做到这一点。我认为佩特瓦尔加的回答会让我有一些调整。 – Brendan 2012-01-12 20:31:56