【发布时间】:2015-04-09 09:06:03
【问题描述】:
我正在尝试读取模板文件,然后按照this answer 中的建议使用 Bash shell 替换此文件中的变量。
这是我的代码:
#!/usr/local/bin/bash
website_name=new_website_name
while read line
do
eval echo "$line"
done < "/etc/apache2/extra/vhost-template.txt"
这适用于包含以下内容的测试模板文件 (vhost-template.txt):
Directory "/Library/WebServer/Documents/${website_name}"
占位符被替换,我得到正确的输出:
Directory "/Library/WebServer/Documents/new_website_name"
但是我的真实模板文件包含一些无效字符,例如 字符: 这是我的完整模板文件:
<VirtualHost *:80>
ServerAdmin myemailaddress@xyz.com
DocumentRoot "/Library/WebServer/Documents/${website_name}/web/"
ServerName dev.${website_root_dir}.com
ErrorLog "/private/var/log/apache2/${website_name}-dev-error_log"
CustomLog "/private/var/log/apache2/${website_name}-dev-access_log" common
<Directory "/Library/WebServer/Documents/${website_name}">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
这会导致以下错误:
./virtualsetup.sh: eval: line 5: syntax error near unexpected token `newline'
./virtualsetup.sh: eval: line 5: `echo <Directory "/Library/WebServer/Documents/${website_name}">'
我尝试使用反斜杠转义 字符或将它们更改为
'<' or '>'
例如
\<Directory "/Library/WebServer/Documents/${website_name}"\>
但这给出了同样的错误 和
<Directory "/Library/WebServer/Documents/${website_name}">
给出这个错误:
gt: 找不到命令
我也尝试将整个模板文件用双引号括起来,但没有成功。
在这种情况下我做错了什么?
谢谢!
【问题讨论】:
-
"/Library/WebServer/Documents/${website_name}"中有什么内容?他们是var=value对吗?如果他们是,你为什么要eval他们而不是source他们? -
我可能应该多解释一下我想要做什么。我试图通过从模板文件中读取标准虚拟主机然后用用户输入替换某些元素来自动在 apache 中创建虚拟主机。我将使用完整的模板文件编辑上面的问题。