gpt4 book ai didi

bash - 如何使用 bash 从模板生成脚本文件?

转载 作者:行者123 更新时间:2023-11-29 08:56:09 24 4
gpt4 key购买 nike

我正在尝试为我们的内部开发服务器自动设置站点创建。

目前,这包括创建系统用户、mysql 用户、数据库和 apache 配置。我知道如何在单个 bash 文件中完成所有操作,但我想问问是否有一种方法可以更干净地生成 apache 配置。

本质上,我想做的是基于模板生成一个 conf 文件,类似于使用 printf。我当然可以使用 printf,但我认为可能有更简洁的方法,即使用 sed 或 awk。

我不想只使用 printf 的原因是因为 apache 配置大约有 20 行长,并且会占用 bash 脚本的大部分内容,并使其更难阅读。

感谢任何帮助。

最佳答案

选择标记参数的方式。一种可能性是 :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

这可确保在脚本因大多数合理信号而退出时删除您的临时文件。您可以保留先前命令的非零退出状态,并在 trap 0 命令之后使用 exit $exit_status

关于bash - 如何使用 bash 从模板生成脚本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com