bash - 检查脚本中的目录是否存在会产生错误“不存在”
问题描述
我正在尝试设置一个脚本,该脚本将在文件树的多个目录中调用代码扫描器。代码扫描器分为两个步骤(“制作”构建和扫描),它们需要一些参数。我想将其浓缩为一个步骤,该步骤将自动切换目录并运行两步扫描。
我的问题是,当我的脚本遍历目录列表(在脚本中预定义)时,它试图检测目录的存在,但它不断出现它不存在的错误。我打电话给“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 来做这项工作,但这个问题真的让我很难过,我想深入了解这个问题,以防它再次出现。
如果这看起来相当长,我很抱歉。对这个有趣问题的任何见解将不胜感激。
解决方案
推荐阅读
- python-3.x - 如何从 Flask 前端访问 Flask API?
- php - PHP多维数组按值搜索随机子级数组
- c++ - 为什么合并后的数组有奇怪的值?
- windows - 使用windeployqt.exe时找不到文件
- java - 有人在 Spring Boot 应用程序中通过 SAMLCallbackHandler 成功地将 Spring.WS 的 Wss4jSecurityInterceptor 用于 SAML 安全性吗?
- javafx - 如何在 JavaFX 中通过 nativeHandle (hwnd) 创建舞台
- magnolia - Magnolia CMS Content App 多值和复合字段错误
- javascript - 在Javascript中循环遍历两个数组和匹配元素
- .net - 如何注入 AntiForgery 令牌?
- .htaccess - htaccess 规则使用 Cloudflare 地理定位将国家参数添加到 URL