【问题标题】:Shell script to append new lines to etc/hosts and Apache httpd-vhosts.conf in Mac OSX 10.6在 Mac OSX 10.6 中将新行附加到 etc/hosts 和 Apache httpd-vhosts.conf 的 Shell 脚本
【发布时间】:2011-08-20 09:47:06
【问题描述】:

我正在使用 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

我不知道如何从终端将文本附加到文件中。

有什么想法或有用的想法吗?

谢谢, 帕特里克

【问题讨论】:

    标签: apache macos shell terminal virtual-hosts


    【解决方案1】:

    未经测试,但应该可以工作:

    #!/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
    

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

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

    【讨论】:

    • 谢谢伙计,这完全有效。我真的很感激帮助。我必须做的唯一更改是 httpd-vhosts.conf 文件的文件路径,并在其末尾添加“zendctl.sh restart-apache”。简单!老兄,你摇滚。
    【解决方案2】:

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

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

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

    我把它放在/Users/imran 中,命名为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 ~ 命令访问该目录。现在假设您创建了一个名称为test 的站点。您应该可以访问 http://test.local/phpinfo.php 以查看您的 vhost 工作。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2015-08-09
      • 2017-04-17
      • 2014-06-06
      • 1970-01-01
      • 2017-07-28
      • 2020-03-09
      • 2016-03-03
      • 1970-01-01
      相关资源
      最近更新 更多