Bash写入由变量命名的文件

时间:2016-11-14 03:14:23

标签: linux bash

我正在创建一个简单的脚本,以便在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来拆分域名

1 个答案:

答案 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
$