如何在shell脚本(.sh文件)中处理java -cp命令的异常

时间:2015-04-10 16:53:49

标签: java bash shell

我把这个命令放在.sh文件中:

CP="$1"
"$JAVA_CMD" -cp "$CP" "$MAIN_CLASS" "$@" 

其中CP是jar文件的路径

我的问题是:

当CP没有正确的值时,在此指令中找不到主类,我将收到此异常:

Exception in thread "main" java.lang.NoClassDefFoundError

如何在shell脚本中处理此异常?

2 个答案:

答案 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