首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >echo $ with Bash

echo $ with Bash
EN

Stack Overflow用户
提问于 2016-04-22 17:41:36
回答 2查看 343关注 0票数 1

我为某些东西编写了一个安装脚本,现在我需要用它创建一个虚拟主机。为此,我使用了以下代码:

代码语言:javascript
复制
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}在这里并不是变量,应该按原样打印。不幸的是,它不是将内容写入文件,而是将内容回显到终端,出现一些错误(文件未找到等)。当我删除最后两行时,它确实有效,但这当然不是一个解决方案,但我似乎无法让它工作。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-22 18:01:09

用这里的文件。如果需要的话,可以使用\来避开美元符号。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2016-04-22 17:47:29

echo理解多行字符串:

代码语言:javascript
复制
echo "
fist section here with ${substitutions}


" > /etc/apache2/sites-available/app.conf

然后追加最后一节:

代码语言:javascript
复制
echo '
second section here without substitutions
' >> /etc/apache2/sites-available/app.conf

但是在这种情况下,创建一个模板文件然后使用例如sed来进行字符串替换可能更容易吗?我使用Jinja2的命令行接口来执行相同的任务(https://github.com/kolypto/j2cli),但对于这样一个简单的模板,这几乎肯定是过分的;)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36800173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档