bash脚本出错"退出代码126"

ale*_*hun 6 java bash xcode objective-c ios

我想将CPD(复制粘贴检测)集成到我的iOS项目中.我在这里这里读到了它.

要在代码中自动确定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}"
Run Code Online (Sandbox Code Playgroud)

该代码创建了cpd-output.xml文件.但是在编译时带错了"Command/bin/sh失败,退出代码为126".这是日志副本http://pastebin.com/359k1Wni 我从这个示例项目中获取了代码 错误然后我评论此字符串:

${BUILT_PRODUCTS_DIR} -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"
Run Code Online (Sandbox Code Playgroud)

我试图找到有关此错误的信息,但发现只有少数这些问题没有答案.我对bash脚本没什么了解.任何建议我都会很满意.感谢您的关注.

PS作者遵循写的脚本:

为了集成XCode和CPD,我们将使用项目Run Script阶段添加Build Phases目标,该阶段通常由几个部分组成:实际调用cpd解析cpd-output.xml以"正确的格式"输出

Chr*_*ris 7

126为"命令不可执行"

# Running self :)
${BUILT_PRODUCTS_DIR} -cpd-xml "${FULL_PATH_TO_CPD_XML_OUTPUT}"
Run Code Online (Sandbox Code Playgroud)

看起来$ BUILT_PRODUCTS_DIR}不可执行你能用这个var的值更新吗?


Vib*_*bha 7

该错误也可能是由于运行 Shell 的“权限”不足造成的。我得到了:- bash: /home/XXX.sh: Permission denied exit-status: 126
在修复 shell 脚本的权限时,问题得到了解决。

  • `chmod +x foo.sh` 以允许执行 (4认同)

ale*_*hun 1

问题出在错误的脚本上。我给出了修改后的脚本,其中已添加日志:

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}"
Run Code Online (Sandbox Code Playgroud)

这是示例复制粘贴检测的​​源代码