检查脚本中目录的存在会产生错误“不存在”

时间:2019-04-25 19:26:16

标签: bash scripting

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

我的问题是,当我的脚本遍历目录列表(在脚本中预定义)时,它会尝试检测目录的存在,但是会不断出现一个不存在的错误。我调用了“ 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来完成这项工作,但是这个问题确实让我感到困扰,我想深入探究这个问题,以防万一它再次出现。

很抱歉,这似乎很长。对这个有趣问题的任何见解将不胜感激。

0 个答案:

没有答案