BASH-通过搜索整个系统找到Java类及其JAR目录



我有以下脚本,它确实接近我所需的内容;也就是说,搜索整个系统中包含特定Java类文件的JAR文件。这个脚本我唯一的问题是确认它是根据我传递的类名称在JAR中找到的类文件的确认。目前,该脚本只会使我回到罐子内的类包,而不是jar itIN IN,这意味着它是无用的。我想使用$?要检查搜索命令是否成功,如果可以的话,目录已进入文件中。不过,它总是返回成功(0),因此每个jar位置都发现它正在附加到文件上。我现在停止说话,有人可以运行此脚本,看看它在做什么,而不是我要做什么?

if [ $# -ne 1 ]
then
   echo "Need to provide class name as argument"
   exit 1
fi
> findClassResults.txt
for i in $(locate "*.jar");
do
    if [ -d $i  ]
    then
        continue
    fi
    if jar -tvf $i | grep -Hsi $1.class 1>/dev/null
    then
        potentialMatches=`jar -tvf $i | grep -Hsi $1.class`
        exactMatch=`echo $potentialMatches | grep -o /$1.class`
        if [ ! -z $exactMatch ]
        then
            echo "matches found: " $potentialMatches >> findClassResults.txt
            echo ".....in jar @: " $i >> findClassResults.txt
            echo -e "n" >> findClassResults.txt
        fi
    fi
done

编辑:以上是工作脚本。它将通过以类的名义传递(例如./findclass.sh myclass

将整个循环的输出重定向到您的结果文件,而不是单独命令(并使用while循环迭代结果,而不是for循环):

< <(locate "*.jar") while read -r i
    do
        if [ -d "$i"  ] #mvn repos have dirs named as .jar, so skip...
        then
           continue
        fi
        if jar -tvf "$i" | grep -q -Hsi "$1.class"
        then
          echo "jar location: $i"
        fi
done | tee -a findClassResutls.txt

$?您正在使用Tee命令,我敢打赌,它总是成功。您可能需要管道输出并捕获Bash中的退出状态

相关内容

  • 没有找到相关文章

最新更新