首页 > 解决方案 > 检查脚本中的目录是否存在会产生错误“不存在”

问题描述

我正在尝试设置一个脚本,该脚本将在文件树的多个目录中调用代码扫描器。代码扫描器分为两个步骤(“制作”构建和扫描),它们需要一些参数。我想将其浓缩为一个步骤,该步骤将自动切换目录并运行两步扫描。

我的问题是,当我的脚本遍历目录列表(在脚本中预定义)时,它试图检测目录的存在,但它不断出现它不存在的错误。我打电话给“if [-d]”,但它一直到语句的 ELSE 部分失败。

我查找了如何循环遍历子目录数组并尝试了几种不同的循环方式。我还尝试更改目录以及如何访问脚本中的变量。我查看了几个 Stack Overflow 的答案,但也没有帮助。

作为脚本的一部分,我调用了一个函数来解析文件以在构建完成之前找到另一个要更改的目录。这个目录是构建发生的地方。然后扫描在另一个目录中完成。我正在即时切换到这些目录。我仔细检查了我的局部变量,并试图改变我在函数中返回返回变量的方式。一切都没有运气。

这是我的大部分脚本。我尽量把它提炼出来。

declare -a SCANDIRS=("atpsw" "emsw" "lssw")
SRCHOME=`pwd`
CONFIGFILE='scan.properties'

function get_build_dir()
{
    while read -r line
    do
        set -- `echo $line | tr '=' ' '`
        local key=$1
        local value=$2
        if [ "$key" == "scan.sources" ]
        then
            break
        fi
    done < "$CONFIGFILE"

    #return the value as a string
    echo "$value"
}

for i in ${SCANDIRS[@]}
do (
    if [ -d "$i" ]
    then
        echo "SRCHOME DIR: $SRCHOME"
        echo "Scanning $i ..."
        cd "$i"

        if [ -f "$CONFIGFILE" ]
        then
            echo "Property File Exists"

# Switch this comment to make it work
            todir="$(get_build_dir)"
            #todir="src"

            builddir="$PWD/${todir}"
            echo "Switching to directory: ${builddir}"

            if [ -d ${builddir} ]
            then
                cd ${builddir}
                echo `pwd`
            else
                echo "--->>>> ${builddir} does not exist"
            fi
        else
            echo "Property File does not exist"
        fi

        cd "${SRCHOME}"
        echo `pwd`
        echo
    fi
) done

我得到的输出是:

SRCHOME DIR: /home/sorton/src/LWSD
Scanning atpsw ...
Property File Exists
Switching to directory: /home/sorton/src/LWSD/atpsw/.
--->>>> does not existc/LWSD/atpsw/.
/home/sorton/src/LWSD

SRCHOME DIR: /home/sorton/src/LWSD
Scanning emsw ...
Property File Exists
Switching to directory: /home/sorton/src/LWSD/emsw/src
--->>>> does not existc/LWSD/emsw/src
/home/sorton/src/LWSD

SRCHOME DIR: /home/sorton/src/LWSD
Scanning lssw ...
Property File Exists
Switching to directory: /home/sorton/src/LWSD/lssw/./ls
--->>>> does not existc/LWSD/lssw/./ls
/home/sorton/src/LWSD

对于每个循环,“扫描...”目录更改为数组项之一。检查并解析属性文件,然后检查构建目录,每次都失败。您会在输出中的箭头处注意到,字符串是乱码并且被截断并且无序。我不得不添加箭头,因为它们没有在运行时打印出来。

我将问题缩小到调用函数并返回要切换到的目录。在“cd”到它之前检查的是这个目录。如果我注释掉获取“todir”值的函数调用并将其替换为紧随其后的行,则脚本将按预期工作。

我知道我可能会让 MAKE 来做这项工作,但这个问题真的让我很难过,我想深入了解这个问题,以防它再次出现。

如果这看起来相当长,我很抱歉。对这个有趣问题的任何见解将不胜感激。

标签: bashscripting

解决方案


推荐阅读