我把这个命令放在.sh文件中:
CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@"
其中CP是jar文件的路径
我的问题是:
当CP没有正确的值时,在此指令中找不到主类,我将收到此异常:
Exception in thread "main" java.lang.NoClassDefFoundError
如何在shell脚本中处理此异常?
答案 0 :(得分:1)
也许您可能会发现此链接有用:http://www.tldp.org/LDP/abs/html/exit-status.html
Bash包含一个名为$?
的内置变量,其中包含先前执行的命令的退出代码。 $? == 0
表示Java程序已成功执行,$? != 0
表示Java程序引发了异常,例如您的异常。
答案 1 :(得分:1)
要用您自己的错误消息替换打印到stderr的任何错误,您可以取消命令的stderr(通过重定向到/dev/null
)并在命令的退出状态为非零时打印您的消息:
CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 2>/dev/null || { echo "error: Java exited with nonzero status $?"; exit 1; }
这是一种更冗长的方式,对于Bash相对较新的人来说可能更具可读性:
CP="$1"
if ! "$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 2>/dev/null; then
echo "error: Java exited with nonzero status $?"
exit 1
fi