2016-04-22 17 views
1

私は何かのためのセットアップスクリプトを書いたので、それで仮想ホストを作成する必要があります。

echo -e \ 
"WSGISocketPrefix $DIRECTORY/socks/\n"\ 
"WSGIPythonHome $DIRECTORY/env/local\n"\ 
"WSGIRestrictStdout On\n"\ 
"WSGIRestrictSignal Off\n"\ 
"WSGIPythonOptimize 1\n"\ 
"<VirtualHost *:80>\n"\ 
" ServerAdmin [email protected]\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}ここでは変数はありませんので、そのまま出力してください。残念ながら、ファイルに内容を書き込む代わりに、何らかのエラー(ファイルが見つからないなど)で端末にエコーします。私は最後の2行を削除すると動作しますが、もちろん解決策ではありませんが、動作しないようです。

アイデア?

+0

を見てみましょう:[ここドキュメント](https://en.wikipedia.org/wiki/Here_document) – Cyrus

答えて

2

ここにドキュメントを使用してください。 \を使用して、必要に応じてドル記号をエスケープします。

cat <<EOF > /etc/apache2/sites-available/app.conf 
WSGISocketPrefix $DIRECTORY/socks/ 
WSGIPythonHome $DIRECTORY/env/local 
WSGIRestrictStdout On 
WSGIRestrictSignal Off 
WSGIPythonOptimize 1 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    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 
+0

はありがとうを、それのthats。 didntはbashがこれを使用できることを知っています:) – Hering

2

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?私は同じタスク(https://github.com/kolypto/j2cli)を実行するためにJinja2のコマンドラインインターフェイスを使用していますが、それはそのような単純なテンプレートのためにほとんど確実に残虐です;-)

関連する問題