gpt4 book ai didi

linux - 为什么我的 bash 脚本在空白处中断?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:09 25 4
gpt4 key购买 nike

我有一个 shell 脚本,它在第 42 行的 Virtualhost 和 *.结果,唯一回显到控制台的是

<VirtualHost 

我想要的是将我的整个字符串回显到控制台。

<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

最佳答案

需要将变量放在双引号内展开,无需分词和通配符展开。

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

脚本中的另一个问题是 replaceStringInFile() 函数。变量仅在双引号内扩展,而不是单引号。所以应该是:

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

关于linux - 为什么我的 bash 脚本在空白处中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18789687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com