2013-09-13 3 views
1

У меня есть сценарий оболочки, который разбивается на пробел на линии 42 между Virtualhost и *. В результате, единственное, что echo'd утешать являетсяПочему мой скрипт bash разбивается на пустое пространство?

<VirtualHost 

То, что я хочу, чтобы это произошло для всей моей струна быть echo'd на консоль.

<VirtualHost *:80> 
     DocumentRoot /Applications/MAMP/htdocs/web 
     ServerName web.localhost 
     <Directory /Applications/MAMP/htdocs/web> 
     Options Indexes FollowSymLinks MultiViews +Includes 
     AllowOverride All 
     Order allow,deny 
     allow from all 
     </Directory> 
</VirtualHost> 

Вот мой скрипт для справки:

#!/bin/bash 
# This script should be used to automate the web site installation 

checkFileForString() 
{ 
    # $1 = file 
    # $2 = regex 
    # $3 = text to be added 
    declare file=$1 
    declare regex=$2 
    declare file_content=$(cat "${file}") 

    if [[ ! " $file_content " =~ $regex ]]; then 
     echo "$3" #>> $file 
    else 
     replaceStringInFile $file $regex $3 
    fi 
} 

replaceStringInFile() 
{ 
    # $1 = file 
    # $2 = old string 
    # $3 = new string 

    sed -i -e 's|${2}|${3}|' $1 
} 

createFile() 
{ 
    # $1 = file 
    declare fileToCheck=$1 

    if [ ! -f $fileToCheck ]; then 
     touch $fileToCheck 
    fi 
} 

# Add vhosts to httpd-vhosts.conf 
echo "Adding vhosts to httpd-vhosts.conf" 
currentFile="/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf" 
currentRegex="<VirtualHost\s[*]:80>\s+DocumentRoot\s/Applications/MAMP/htdocs/web\s+ServerName\sweb.localhost" 
newText="<VirtualHost *:80> 
    DocumentRoot /Applications/MAMP/htdocs/web 
    ServerName web.localhost 
    <Directory /Applications/MAMP/htdocs/web> 
    Options Indexes FollowSymLinks MultiViews +Includes 
    AllowOverride All 
    Order allow,deny 
    allow from all 
    </Directory> 
</VirtualHost> 
" 

checkFileForString $currentFile $currentRegex $newText 

ответ

4

Вы должны поместить переменные в двойных кавычках, чтобы расширить их без слов расщепления и маски расширения.

checkFileForString "$currentFile" "$currentRegex" "$newText" 

Другая проблема в вашем скрипте - это функция replaceStringInFile(). Переменные расширяются только в двойных кавычках, а не в одинарных кавычках. Так оно и должно быть:

sed -i -e "s|${2}|${3}|" "$1" 
+0

И для дальнейшего чтения, [вики Грега] (http://mywiki.wooledge.org/Quotes) и [руководство] (http://tldp.org/LDP/abs /html/quotingvar.html). Кроме того, рассмотрите возможность использования ['printf'] (http://www.freebsd.org/cgi/man.cgi?query=printf&sektion=1). – Graham

Смежные вопросы