2016-04-27 4 views
0

jarファイルの内容を調べて、そのjarファイル内のいくつかのファイルをunixで検索したいとします。 私がしたのはjar -tvf "path_to_file/file_name.jar" | grep class_name_to_searchでした。この後、私は簡単に希望の結果を得ることができます。jar -tvfは個別に動作しています。 bashスクリプトに含まれていると動作しません

上記のコマンドを単純なbashスクリプトで使用すると問題が発生します。 以下は今、得るものです

#!/bin/bash nameToSearch=MyClassFileName str="" for i in $(find . -name "*.jar" | xargs [email protected] -d"\n" echo \"@\"); do # This is to append double quotes each line of the result of find command result=$(jar -tvf $i | grep $nameToSearch) echo "result: $result" done

がエラーを下回っている私の小さなスクリプトです

結果:

java.util.zip.ZipExceptionます。javaでのzipファイル を開くにエラー.util.zip.ZipFile.open(ネイティブメソッド) at java.util.zip.ZipFile(ZipFile.java:127) at java.util.zip.ZipFile(ZipFile.java:88) at sun .tools.jar.Main.list sun.tools.jar.Main.runで(Main.java:977) (Main.java:222)

それは私が追加されません場合にのみ、望ましい結果を提供します""でfindコマンドの結果。私の要求は二重引用符で結果を追加することです。

ご協力いただければ幸いです。 。例の場合 :事前に感謝

+0

このような "evalの" 試してみてください。結果は= $(evalの "$ I -tvf jarファイルを| grepを$ nameToSearch" ) – Sanj

+0

ありがとう、それは働いた! – Vishal

答えて

0

問題はジャーTVFあるファイルは1つだけで渡すことができます

適切な解決策は、コマンドごとに一つのパラメータを使用するにxargsのを教えてくれているのjar TVFの1.jar。 jar tvf 2.jar; ...

すると、次の世話をするためにbashスクリプトにコードを修正してください:

find . -name "*.jar" | xargs -n 1 jar tvf 

or 

find . -name "*.jar" | xargs -i jar tvf {}