在shell中执行java并等到我得到返回代码

时间:2017-01-16 07:01:07

标签: java shell return-value

我现在正在执行java这样的java程序:

package com.test;

public class Test {

    public static void main(String[] args){
        execute();
    }

    public static String  execute(){
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "a";
    }
}

我想在linux shell脚本中执行Test.execute()方法,等到方法返回并获取返回代码。但是main()方法的返回是无效的,那么我可以做什么来获取返回代码或从中返回消息?

有什么建议吗?

我找到了解决方案:

package com.test;

public class Test {

    public static void main(String[] args){
          execute();
    }

    public static String  execute(){
        try {
            System.out.println("sleeping");;
            Thread.sleep(5000);
            Runtime.getRuntime().exit(100);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "a";
    }
}

然后我的shell:

#!/bin/bash
java -cp test.jar com.test.Test
echo "The return code of the java application is $?"

我可以得到Runtime.getRuntime().exit(n);

中的值n

2 个答案:

答案 0 :(得分:0)

shell脚本必须调用java com.test.Test。这将调用inturn当前正在调用execute的main方法。 从shell脚本开始,您必须启动JVM,JVM始终以Main方法启动。 至于返回代码,您可以使用$? shell变量访问它。 所以基本上你的shell脚本就是这样的:

#!/bin/bash
java -cp . com.test.Test
echo "The return code of the java application is $?"

此外,您还需要指定所有相关类所在的类路径。在上面的例子中,我将当前目录作为类路径。

在完成所有非守护程序线程后,JVM将以退出代码0终止。如果要在出现错误时返回特定的退出代码,可以使用System.exit(<codehere>)。请注意,即使存在正在运行的其他非守护程序线程,调用System.exit()也会导致JVM关闭。

编辑: 添加&#34; -cp。&#34;基于评论的命令。 添加了一些退出代码详细信息

答案 1 :(得分:0)

首先在代码示例中更改main方法的签名:

public static void main()public static void main(String[] args)

然后,不要只从execute调用main方法,而是尝试使用System.out.println打印结果:

System.out.println(execute());

然后在linux shell中你可以使用以下来获取返回值:

> set out   = `java com.test.Test`
> echo $out