我想从shell脚本运行一个Java程序.所以我做了类似下面的事情
我的测试Java文件如下
public class EchoTest {
public static void main (String args[]) {
System.out.println ("scuccess ..!!");
}
Run Code Online (Sandbox Code Playgroud)
我的测试shell脚本文件如下
out=$(java EchoTest)
echo $out
Run Code Online (Sandbox Code Playgroud)
我编译了java程序,然后我运行了那个shell脚本(比如$ sh Myscript.sh).现在它将输出打印到console.Upto现在它正常工作.
如果我写一个像下面的程序(抛出一些异常)
public class EchoTest {
public static void main (String args[]) {
System.out.println ("Value is "+(2/0));
}
Run Code Online (Sandbox Code Playgroud)
它只是将java异常打印到控制台上.但是我的要求是我希望它在控制台上打印0或1,即当我的java程序失败时我希望得到0(零)并且想要在java程序成功执行时得到1(一).
来自java程序的文档说:
退出状态
启动程序通常会返回以下退出值,通常是在使用错误的参数,严重错误或从Java虚拟机引发的异常调用启动程序时.但是,Java应用程序可以选择使用API调用System.exit(exitValue)返回任何值.
因此,如果您不执行任何操作,JVM遵循以下惯例约定:在成功完成时将0值返回给调用者,并在出现错误时返回非null值.
那么你的shell脚本应该是:
java EchoTest
if [ $? -eq 0]
then echo 1
else echo 0
fi
Run Code Online (Sandbox Code Playgroud)
这意味着您可以忽略标准输出和标准错误,只需依赖JVM的退出状态.
正如@alk所建议的,你甚至可以out = $( java EchoTest )用成功分支代替第一行并使用$out它(当时是)$?0
您需要使用System.exit(code)您想要的代码,具体取决于您是否检测到错误/异常
你将会拥有
System.exit(0) // if you detect error, you need to handle exception
System.exit(1) // when no error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |