如何检查Java脚本在Shell脚本中是否成功执行?

问题描述

我正在从Shell脚本运行Java程序。我需要根据是否在Java程序中发生异常或运行是否成功,在同一shell脚本中执行下一步。我知道Java不会运行任何程序。我们如何在shell脚本中做到这一点? 我知道我们可以在日志中打印一些字符串并将其grep来检查状态。有什么更好的方法吗? 即使我可以使用grep获得一些优雅的方法来做到这一点也很好。

解决方法

如果Java程序由于异常而终止,则JVM将以错误状态1而不是通常的成功状态0退出。例如,由于NullPointerException,该程序退出:

shell$ cat Throw.java
public class Throw {
    public static void main(String[] args) {
        String s = null;
        System.out.println(s.length());
    }
}
shell$ java Throw 2>/dev/null; echo $?
1

例如,您可以在shell if语句中使用退出状态。这将打印boo

if java Throw 2>/dev/null ; then
   echo woo
else
   echo boo
fi

如果要设置除1以外的退出代码,请使用System.exit(int status)函数。