1. ホーム
  2. java

[解決済み] bashスクリプトでのエラー "終了コード126"

2022-02-11 03:20:44

質問

iOSプロジェクトにCPD(Copy-Paste-Detection)を組み込みたいのですが、どうすればいいですか?私はそれについて読んだ こちら こちら .

コード中のCopyPasteを自動的に判断するために、bashスクリプトを使用しています。

echo "Checking files in ${SOURCE_ROOT}"
JARS_DIR=${PROJECT_DIR}/CPD
FULL_PATH_TO_CPD_XML_OUTPUT=${PROJECT_DIR}/cpd-output.xml

# Running CPD
java -classpath "${JARS_DIR}/ObjCLanguage-0.0.5-SNAPSHOT.jar:${JARS_DIR}/pmd.jar" net.sourceforge.pmd.cpd.CPD --minimum-tokens 100 --files "${SOURCE_ROOT}" -v --language ObjectiveC --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer > "${FULL_PATH_TO_CPD_XML_OUTPUT}"

# Running self :)
${BUILT_PRODUCTS_DIR} -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"

このコードで cpd-output.xml ファイルが作成されます。しかし、コンパイル時に "Command /bin/sh failed with exit code 126" というエラーが発生します。以下はログのコピーです。 http://pastebin.com/359k1Wni 私はここからコードを取った プロジェクト例 この文字列をコメントすると、エラーが発生します。

${BUILT_PRODUCTS_DIR} -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"

このエラーについてどんな情報でも見つけようとしましたが、答えのないこれらの問題のいくつかを見つけただけでした。私はbashスクリプトについて何も知らないのです。何かアドバイスがあれば幸いです。 ご清聴ありがとうございました。

追伸:以下のスクリプトの作者です。

<ブロッククオート

XCodeとCPDを統合するために、Build(ビルド) プロジェクトと一緒にターゲットとなるスクリプト実行フェーズは、従来は はいくつかの部分から構成されている。実際にcpdを呼び出す 構文解析 cpd-output.xml 正しいフォーマットで出力される。

解決方法は?

問題は、間違ったスクリプトにありました。ログを追加した修正スクリプトを提供します。

echo "Checking files in ${SOURCE_ROOT}"
CPD_DIR=${PROJECT_DIR}/CPD
JARS_DIR=${PROJECT_DIR}/CPD
FULL_PATH_TO_CPD_XML_OUTPUT=${PROJECT_DIR}/cpd-output.xml
OBJC_JAR_LIBRARY=${JARS_DIR}/ObjCLanguage-0.0.5-SNAPSHOT.jar

echo [DEBUG] CPD_DIR = ${CPD_DIR}
echo [DEBUG] JARS_DIR = ${JARS_DIR}
echo [DEBUG] FULL_PATH_TO_CPD_XML_OUTPUT = ${FULL_PATH_TO_CPD_XML_OUTPUT}
echo [DEBUG] OBJC_JAR_LIBRARY = ${OBJC_JAR_LIBRARY}
echo [DEBUG] SOURCE_ROOT = ${SOURCE_ROOT}

# Running CPD
java -classpath "${OBJC_JAR_LIBRARY}:${JARS_DIR}/pmd.jar" net.sourceforge.pmd.cpd.CPD --minimum-tokens 200 --files "${SOURCE_ROOT}" -v --language ObjectiveC --encoding UTF-8 --format net.sourceforge.pmd.cpd.XMLRenderer > "${FULL_PATH_TO_CPD_XML_OUTPUT}"

CPD_EXECUTABLE="${CPD_DIR}/CPDObjective-C"
if [ ! -f "${CPD_EXECUTABLE}" ];
then
echo "CPD executable file is not found: " ${CPD_EXECUTABLE}
fi
echo "Running ${CPD_EXECUTABLE} -cpd-xml ${FULL_PATH_TO_CPD_XML_OUTPUT}"
"${CPD_EXECUTABLE}" -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"

のソースコードです。 サンプル コピーペースト検出