有一个shell脚本easysearch.sh,在uos/deepin下运行报错,已经手动把该脚本变成可执行文件了,还是报错。 Failed to execute tmp/13234195060205085365/easysearch.sh with error 13.
easysearch.sh脚本是一个大型生信的程序自动生成的脚本。easysearch.sh脚本如下,报错的原因是什么,怎么解决可以运行使easysearch.sh脚本运行?是sh脚本权限,还是文件夹什么的,还是程序自身的原因?
#!/bin/sh -e
fail() {
echo "Error: $1"
exit 1
}
notExists() {
[ ! -f "$1" ]
}
INPUT="$INPUT"
if notExists "${TMP_PATH}/query.dbtype"; then
# shellcheck disable=SC2086
"$MMSEQS" createdb "$@" "${TMP_PATH}/query" ${CREATEDB_QUERY_PAR} \
|| fail "query createdb died"
fi
if notExists "${TARGET}.dbtype"; then
if notExists "${TMP_PATH}/target"; then
# shellcheck disable=SC2086
"$MMSEQS" createdb "${TARGET}" "${TMP_PATH}/target" ${CREATEDB_PAR} \
|| fail "target createdb died"
fi
TARGET="${TMP_PATH}/target"
fi
if [ -n "${LINSEARCH}" ] && notExists "${TARGET}.linidx"; then
# shellcheck disable=SC2086
"$MMSEQS" createlinindex "${TARGET}" "${TMP_PATH}/index_tmp" ${CREATELININDEX_PAR} \
|| fail "createlinindex died"
fi
INTERMEDIATE="${TMP_PATH}/result"
if notExists "${INTERMEDIATE}.dbtype"; then
# shellcheck disable=SC2086
"$MMSEQS" "${SEARCH_MODULE}" "${TMP_PATH}/query" "${TARGET}" "${INTERMEDIATE}" "${TMP_PATH}/search_tmp" ${SEARCH_PAR} \
|| fail "Search died"
fi
if [ -n "${GREEDY_BEST_HITS}" ]; then
if notExists "${TMP_PATH}/result_best.dbtype"; then
# shellcheck disable=SC2086
$RUNNER "$MMSEQS" summarizeresult "${TMP_PATH}/result" "${TMP_PATH}/result_best" ${SUMMARIZE_PAR} \
|| fail "Search died"
fi
INTERMEDIATE="${TMP_PATH}/result_best"
fi
if notExists "${TMP_PATH}/alis.dbtype"; then
# shellcheck disable=SC2086
"$MMSEQS" convertalis "${TMP_PATH}/query" "${TARGET}${INDEXEXT}" "${INTERMEDIATE}" "${RESULTS}" ${CONVERT_PAR} \
|| fail "Convert Alignments died"
fi
if [ -n "${REMOVE_TMP}" ]; then
if [ -n "${GREEDY_BEST_HITS}" ]; then
# shellcheck disable=SC2086
"$MMSEQS" rmdb "${TMP_PATH}/result_best" ${VERBOSITY}
fi
# shellcheck disable=SC2086
"$MMSEQS" rmdb "${TMP_PATH}/result" ${VERBOSITY}
if [ -z "${LEAVE_INPUT}" ]; then
if [ -f "${TMP_PATH}/target" ]; then
# shellcheck disable=SC2086
"$MMSEQS" rmdb "${TMP_PATH}/target" ${VERBOSITY}
# shellcheck disable=SC2086
"$MMSEQS" rmdb "${TMP_PATH}/target_h" ${VERBOSITY}
fi
# shellcheck disable=SC2086
"$MMSEQS" rmdb "${TMP_PATH}/query" ${VERBOSITY}
# shellcheck disable=SC2086
"$MMSEQS" rmdb "${TMP_PATH}/query_h" ${VERBOSITY}
fi
rm -rf "${TMP_PATH}/search_tmp"
rm -f "${TMP_PATH}/easysearch.sh"
fi
放下执行报错的截图
题主,可以在每行代码后边加一下echo 打印一下输出,先找出到底是那行命令出错了,然后再分析为什么出错。总之先找准问题的确切位置。
chmod +x uos/deepin/easysearch.sh
应该不是这个脚本执行不了 脚本可能已经执行进去了 在脚本里加点输出看看在哪一行报的错
谢谢大家,这个软件是MMseqs2
https://github.com/soedinglab/MMseqs2
但是看起来用大家排除的办法没办法解决这个问题,因为他把可执行程序都封装成一个72M的mmseqs的执行文件了,找到原因了,也没办法修改。所以放弃找原因了,直接换用其他类似软件。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!