我正在创建一个简单的脚本,以便在Apache服务器上轻松设置虚拟主机。目前我似乎无法编写配置文件,因为它在一个变量中。我该如何解决它。这是我的代码不起作用。
siteConf="/etc/apache2/sites-available/$domain.conf"
echo "creating conf file"
echo "<VirtualHost *:80>" >> $siteConf
echo "ServerName *.$domain" >> $siteConf
echo "DocumentRoot $publicHtmlLoc" >> $siteConf
echo "DirectoryIndex index.php" >> $siteConf
echo "ServerAlias $database.newphp.junglecoders.dk" >> $siteConf
echo "</VirtualHost>" >> $siteConf
我正在使用bash命令运行脚本。
编辑:我得到的错误是这个
$siteConf: ambiguous redirect
域名来自:
echo "Write websiter url example.com, no sub dir allowed"
read -p "Name: " domain
正如评论中所建议的那样错误的路径,我试图回应变量,我可以看到它已经删除了'。'由于某些原因,而且留下了一个空格,为什么剧本会这样做呢?
EDIT2: 之前在脚本中使用IFS来拆分域名
答案 0 :(得分:4)
代码看起来好像应该有效。
可能会做得更好Looks like MongoDB doesn't understand your locale settings
(或{
echo "<VirtualHost …>"
…
echo "</VirtualHost>"
} > $siteConf
如果你真的想要添加到现有文件中)。这会对所有输出执行单个重定向,并截断文件。将引号的使用括在双引号中是一个好主意:
>> $siteConf
shell脚本的基本调试:
} > "$siteConf"
获得了什么?如果名为的变量不存在或为空,或者它扩展为两个或更多单词,则会出现“模糊重定向”。这表明你的剧本的第一行并不能准确反映你所拥有的内容,但很难猜出你是怎么做错的。错误的名称或不需要的空间可能是最有可能的,但它可能是其他的。
好吧看起来我需要像Getting an 'ambiguous redirect' error建议的答案 antak 那样用引号括起来。
这是一个交叉引用的好问题。有一次,这个问题作为副本被关闭了,但这里的问题结果是bash -x your-script.sh
被设置,这不是另一个问题中确定的另一个麻烦来源。
你是否在剧本的任何一点弄乱了IFS?
是的 - 一直在做IFS,将网址分成几部分。
请注意:
IFS
产量
set_with_spaces="name1 name2"
echo Hi >> $set_with_spaces
从一个变量生成两个名称。
bash: $set_with_spaces: ambiguous redirect too.
如果您一直在搞乱IFS,那么它的当前值可能会改变名称的解释方式。将其恢复为默认值(空白,制表符,换行符):
$ IFS=.
$ domain=abc.def.ghi.jkl
$ echo $domain
abc def ghi jkl
$ echo "$domain"
abc.def.ghi.jkl
$ IFS=$' \t\n'
$ echo $domain
abc.def.ghi.jkl
$