我为某些东西编写了一个安装脚本,现在我需要用它创建一个虚拟主机。为此,我使用了以下代码:
echo -e \
"WSGISocketPrefix $DIRECTORY/socks/\n"\
"WSGIPythonHome $DIRECTORY/env/local\n"\
"WSGIRestrictStdout On\n"\
"WSGIRestrictSignal Off\n"\
"WSGIPythonOptimize 1\n"\
"<VirtualHost *:80>\n"\
" ServerAdmin root@localhost.com\n"\
" ServerName app.localhost\n"\
" DocumentRoot \"$DIRECTORY\"\n"\
" Alias /m/ $DIRECTORY/static/\n"\
" Alias /upfiles/ $DIRECTORY/askbot/upfiles/\n"\
" <DirectoryMatch \"$DIRECTORY/askbot/skins/([^/]+)/media\">\n"\
" Order deny,allow\n"\
" Allow from all\n"\
" </DirectoryMatch>\n"\
" <Directory \"$DIRECTORY/askbot/upfiles\">\n"\
" Order deny,allow\n"\
" Allow from all\n"\
" </Directory>\n"\
"\n"\
" WSGIDaemonProcess askbot_"$NUMBER"_\n"\
" WSGIProcessGroup askbot_"$NUMBER"_\n"\
" WSGIScriptAlias / $DIRECTORY/django.wsgi\n"\
"\n"\
' ErrorLog ${APACHE_LOG_DIR}/askbot_error.log'"\n"\
' CustomLog ${APACHE_LOG_DIR}/askbot_access.log combined'"\n"\
"</VirtualHost>\n" > /etc/apache2/sites-available/app.conf$DIRECTORY是一个包含路径的变量,因此应该打印它的内容。然而,${APACHE_LOG_DIR}在这里并不是变量,应该按原样打印。不幸的是,它不是将内容写入文件,而是将内容回显到终端,出现一些错误(文件未找到等)。当我删除最后两行时,它确实有效,但这当然不是一个解决方案,但我似乎无法让它工作。
有什么想法吗?
发布于 2016-04-22 18:01:09
用这里的文件。如果需要的话,可以使用\来避开美元符号。
cat <<EOF > /etc/apache2/sites-available/app.conf
WSGISocketPrefix $DIRECTORY/socks/
WSGIPythonHome $DIRECTORY/env/local
WSGIRestrictStdout On
WSGIRestrictSignal Off
WSGIPythonOptimize 1
<VirtualHost *:80>
ServerAdmin root@localhost.com
ServerName app.localhost
DocumentRoot "$DIRECTORY"
Alias /m/ $DIRECTORY/static/
Alias /upfiles/ $DIRECTORY/askbot/upfiles/
<DirectoryMatch "$DIRECTORY/askbot/skins/([^/]+)/media">
Order deny,allow
Allow from all
</DirectoryMatch>
<Directory "$DIRECTORY/askbot/upfiles">
Order deny,allow
Allow from all
</Directory>
WSGIDaemonProcess askbot_$NUMBER_
WSGIProcessGroup askbot_$NUMBER_
WSGIScriptAlias / $DIRECTORY/django.wsgi
ErrorLog \${APACHE_LOG_DIR}/askbot_error.log
CustomLog \${APACHE_LOG_DIR}/askbot_access.log combined
</VirtualHost>
EOF发布于 2016-04-22 17:47:29
echo理解多行字符串:
echo "
fist section here with ${substitutions}
" > /etc/apache2/sites-available/app.conf然后追加最后一节:
echo '
second section here without substitutions
' >> /etc/apache2/sites-available/app.conf但是在这种情况下,创建一个模板文件然后使用例如sed来进行字符串替换可能更容易吗?我使用Jinja2的命令行接口来执行相同的任务(https://github.com/kolypto/j2cli),但对于这样一个简单的模板,这几乎肯定是过分的;)
https://stackoverflow.com/questions/36800173
复制相似问题