Ошибка скрипта bash "код выхода 126" - PullRequest
4 голосов
/ 02 апреля 2012

Я хочу интегрировать CPD (Copy-Paste-Detection) в мой проект 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}"

Токод создать файл cpd-output.xml.Но возьмите мне ошибку во время компиляции «Команда / bin / sh завершилась с кодом выхода 126».Вот копия журнала http://pastebin.com/359k1Wni Я взял код из этого примера проекта Произошла ошибка, затем я комментирую эту строку:

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

Я пытался найти какую-либо информацию оэта ошибка, но нашел только некоторые из этих проблем без ответов.Я ничего не знаю о скриптах Bash.Буду рад любым советам.Спасибо за ваше внимание.

PS Автор следующего сценария написан:

Чтобы интегрировать XCode и CPD, мы добавим к цели Build Phases проект,Фаза Run Script, обычно состоящая из нескольких частей: Фактический вызов cpd Parsing cpd-output.xml Вывод в «правильном формате»

Ответы [ 4 ]

7 голосов
/ 02 апреля 2012

126 для «команда не выполняется»

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

Похоже, что $ BUILT_PRODUCTS_DIR} не является исполняемым. Можете ли вы обновить значение этой переменной, пожалуйста

2 голосов
/ 02 апреля 2012

Как и в сообщении об ошибке в pastebin, значение ${BUILT_PRODUCTS_DIR} является каталогом (строка 314). Не имеет смысла пытаться выполнить каталог, поэтому кажется, что скрипт сборки поврежден или поврежден.

Кстати, команды setenv также являются частью скрипта? Обычно это команда csh, а не команда sh или bash. Однако, насколько мне известно, выполнение каталога под tcsh не имеет смысла.

1 голос
/ 08 мая 2017

Ошибка также может быть вызвана из-за неадекватных «разрешений» для запуска командной консоли. Я получил:- bash: /home/XXX.sh: Permission denied exit-status: 126
При исправлении разрешений для сценария оболочки проблема была исправлена.

0 голосов
/ 04 апреля 2012

Проблема была в неверном скрипте. Я даю исправленный скрипт, в который были добавлены логи:

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}"

Вот исходный код образец Copy-Paste-Detect

...