在bash中编写具有替换的公共文件

时间:2013-02-27 12:35:26

标签: bash ubuntu file-io filesystems

我正在编写一个脚本来在我的计算机上设置新项目,

我想要做的一件事就是让它为我自动设置虚拟主机。

文件本身很简单

该文件应该被称为<project>.testfox.dev.conf并且应该包含

<VirtualHost *:80>
DocumentRoot "/var/www/work/<project>"
ServerName <project>.testfox.dev
<Directory "/var/www/work/<project>">
allow from all
Options +Indexes
</Directory>
ErrorLog /var/log/apache2/<project>.error.log
LogLevel error
TransferLog /var/log/apache2/<project>.access.log
</VirtualHost>

我想知道的是,我应该在我的脚本中使用该代码并将其逐行写入文件,或者我应该在sites-available文件夹中有一个虚拟文件,我将其复制,然后搜索替换占位符?

2 个答案:

答案 0 :(得分:4)

最灵活的方法是将其作为模板(作为单独的文件或HEREDOC),逐行编写会使将来很难修改。

HEREDOC方法更容易实现,因为您可以使用变量插值:

cat >$PROJECT.testfox.dev.conf <<EOF

<VirtualHost *:80>
DocumentRoot "/var/www/work/$PROJECT"
ServerName $PROJECT.testfox.dev
<Directory "/var/www/work/$PROJECT">
allow from all
Options +Indexes
</Directory>
ErrorLog /var/log/apache2/$PROJECT.error.log
LogLevel error
TransferLog /var/log/apache2/$PROJECT.access.log
</VirtualHost>
EOF

答案 1 :(得分:1)

两者都是可行的方法。

如果要修改它,将其用作模板会使其更容易,更易读。但是将它作为here document保存在bash脚本中也可以。

最后,这取决于您的偏好。