从bash调用java程序时检测java程序是否失败
我有一个非常简单的bash脚本,它调用一个java程序。如果java程序运行成功或失败,我需要这个bash脚本将输出写入stdout从bash调用java程序时检测java程序是否失败,java,bash,Java,Bash,我有一个非常简单的bash脚本,它调用一个java程序。如果java程序运行成功或失败,我需要这个bash脚本将输出写入stdout #!/bin/bash if java -jar java_program.jar arg1 ; then echo "run:yes" else echo "run:no" fi 如果我的java程序返回 java.lang.ArrayIndexOutOfBoundsException 位于java.lang.System.arraycopy(本机方法
#!/bin/bash
if java -jar java_program.jar arg1 ; then echo "run:yes"
else echo "run:no"
fi
如果我的java程序返回
java.lang.ArrayIndexOutOfBoundsException
位于java.lang.System.arraycopy(本机方法)
在com.redacted.redacted.AdvancedEncryptionStandard.decrypt(AdvancedEncryptionStandard.java:48)
在com.redacted.redacted.App.getStuff(App.java:58)
位于com.redact.redact.App.main(App.java:27)
我的bash脚本仍将返回“run:yes”。我假设这是因为就bash而言,它调用了脚本并运行了。我有没有办法判断java程序是否真的成功运行 是的,你可以。但是您必须在java程序内部使用
System.exit(0)
,以完成执行并与bash通信,确保一切正常。只需返回1
即可传达错误。响应将存储在bash环境中的$?
中,用于if
关于如何在bash上使用$?
结果,还有另一个答案:
是的,你可以。但是您必须在java程序内部使用
System.exit(0)
,以完成执行并与bash通信,确保一切正常。只需返回1
即可传达错误。响应将存储在bash环境中的$?
中,用于if
关于如何在bash上使用$?
结果,还有另一个答案:
通常退出“main”方法(不显式退出)将向shell返回“0”。未捕获的异常将返回状态1
javac a
java a
xception in thread "main" java.lang.Exception
at a.main(a.java:4)
echo $?
=> 1
a在哪里
class a {
public static void main(String [] args) throws Exception {
System.out.println("Hello\n") ;
throw new Exception() ;
}
}
表面上看,这是一种情况,main
只捕获异常,打印它,然后忽略异常,因此调用进程返回0
class a {
public static void main(String [] args) {
System.out.println("Hello\n") ;
try {
doSomething() ;
} catch (Exception e) {
e.printStackTrace) ;
} ;
}
}
几种可能的方法:(1)重写main以允许异常“冒泡”,以及(2)编写将执行旧main的新main,并检查是否成功(3)捕获stderr,并检查错误消息(凌乱)。否则,您就倒霉了通常退出“main”方法(不显式退出)会将“0”返回shell。未捕获的异常将返回状态1
javac a
java a
xception in thread "main" java.lang.Exception
at a.main(a.java:4)
echo $?
=> 1
a在哪里
class a {
public static void main(String [] args) throws Exception {
System.out.println("Hello\n") ;
throw new Exception() ;
}
}
表面上看,这是一种情况,main
只捕获异常,打印它,然后忽略异常,因此调用进程返回0
class a {
public static void main(String [] args) {
System.out.println("Hello\n") ;
try {
doSomething() ;
} catch (Exception e) {
e.printStackTrace) ;
} ;
}
}
几种可能的方法:(1)重写main以允许异常“冒泡”,以及(2)编写将执行旧main的新main,并检查是否成功(3)捕获stderr,并检查错误消息(凌乱)。否则,你就不走运了