用于在Mac OSX 10.6中将新行附加到etc / hosts和Apache httpd-vhosts.conf的Shell脚本

时间:2011-05-06 18:27:18

标签: apache macos shell terminal virtual-hosts

我正在使用Mac OSX 10.6并在其上进行Web开发。我对编写shell脚本知之甚少,但到目前为止我并不熟悉它们。

我想要做的是编写一个shell脚本,它只需要一个本地站点别名和文档目录,然后它将新的别名附加到主机上,类似于“127.0.0.1 mysite.local”在etc / hosts底部的新行。

然后该脚本将附加Apache的httpd-vhosts.conf文件,如下所示:

<VirtualHost *:80>
    DocumentRoot "/Repositories/myproject/mysite.com/trunk/htdocs"
    ServerName mysite.local
    ServerAlias mysite.localhost
</VirtualHost>

然后它最终会运行命令来重启我的Apache服务器。现在我知道重启Apache的终端命令,这很简单。我也知道如何从运行脚本的用户读取站点名称和路径。如下:

#!/bin/bash
read -p "New local site name: " site
read -p "Site path (ex:/Repositories/myproject/mysite.com/trunk/htdocs): " sitepath

我不知道该怎么做是将文本附加到终端的文件中。

有任何想法或有用的想法吗?

谢谢, 帕特里克

2 个答案:

答案 0 :(得分:9)

未经测试,但它应该有效:

#!/bin/bash
read -p "New local site name: " SITE
read -p "Site path (ex:/Repositories/myproject/mysite.com/trunk/htdocs): " SITEPATH

#/etc/hosts
cp /etc/hosts /etc/hosts.original
echo -e "127.0.0.1\t${SITE}.local" >> /etc/hosts

#httpd-vhosts.conf
VHOSTSFILE="/etc/apache2/httpd-vhosts.conf"
cp $VHOSTSFILE ${VHOSTSFILE}.original
echo "<VirtualHost *:80>" >> $VHOSTSFILE
echo -e "\tDocumentRoot \"${SITEPATH}\"" >> $VHOSTSFILE
echo -e "\tServerName ${SITE}.local" >> $VHOSTSFILE
echo -e "\tServerAlias ${SITE}.localhost" >> $VHOSTSFILE
echo '</VirtualHost>' >> $VHOSTSFILE

#restart apache

>>将输出重定向到给定文件,将内容附加到文件中。我还使用-e允许\t扩展为制表符。

请注意,您需要使用sudo运行此脚本。我还包括在修改原始文件之前备份原始文件的命令,以防万一。

答案 1 :(得分:0)

我在上面的答案中做了一些调整,并做了一些额外的事情,因为这对我来说不起作用,但是它帮助我提出了另一个解决方案。此答案仅适用于Mac个用户。

首先进入您的/etc/apache2/httpd.conf并取消注释虚拟主机引用,此行是Include /private/etc/apache2/extra/httpd-vhosts.conf

现在创建一个bash文件,我在用户名为imran的家中创建了bash文件,您需要将其替换为username

我将其放在名为/Users/imran的{​​{1}}内。我赋予了它可执行的权限,因此可以使用create_new_site.sh

轻松地执行它

该脚本的代码如下:

chmod +x create_new_site.sh

完成后,您可以开始使用#!/bin/bash read -p "New local site name (prefix to .local): " SITE SITEPATH=$SITE sudo chmod -R a+w /Users/imran/Sites/web SITEPATH="/Users/imran/Sites/web/${SITEPATH}" mkdir -p $SITEPATH #/etc/hosts cp /etc/hosts /etc/hosts.original echo -e "127.0.0.1\t${SITE}.local" >> /etc/hosts #httpd-vhosts.conf VHOSTSFILE="/etc/apache2/extra/httpd-vhosts.conf" cp $VHOSTSFILE ${VHOSTSFILE}.original echo "<VirtualHost *:80>" >> $VHOSTSFILE echo -e "\tDocumentRoot \"${SITEPATH}\"" >> $VHOSTSFILE echo -e "\tServerName ${SITE}.local" >> $VHOSTSFILE echo '</VirtualHost>' >> $VHOSTSFILE echo '<?php phpinfo();' > "${SITEPATH}/phpinfo.php" sudo chmod -R a+w $SITEPATH #restart apache sudo apachectl restart echo "All done! visit, let's visit http://${SITE}.local/phpinfo.php" 创建新站点。请记住,您需要位于主目录中,可以通过sudo ./create_new_site.sh命令进入。现在,假设您创建了一个名称为cd ~的站点。您应该可以访问http://test.local/phpinfo.php来查看test的运行情况。