将Java系统退出值返回到bash脚本

时间:2013-09-12 12:06:45

标签: java shell

我试图将java程序(System.exit(1);)的返回值转换为shell脚本,但它似乎返回jvm退出代码,如果它没有崩溃,它总是0。出于测试目的,这是我main()中的第一行。 有谁知道怎么做?

我的bash代码:

 ....................
    java  bsc/cdisc/ImportData $p $e $t


#-----------------------------------------
# CATCH THE VALUE OF ${?} IN VARIABLE 'STATUS'
# STATUS="${?}"
# ---------------------------------------
STATUS="${?}"

# return to parent directory
cd ../scripts


echo "${STATUS}"

由于

2 个答案:

答案 0 :(得分:12)

如果您的脚本只有两行,那么您没有检查正确的退出代码。

我猜你正在做类似的事情:

$ java YourJavaBinary
$ ./script 

其中脚本仅包含:

STATUS="${?}"
echo "${STATUS}"

这里,script在子shell中执行。因此,当您执行脚本时,$?是该shell中最后一个命令的值,该子shell中没有任何内容。因此,它总是返回0

您可能想要做的是在脚本中调用java二进制文件。

java YourJavaBinary
STATUS="${?}"
echo "${STATUS}"

或者直接检查退出代码而不使用脚本:

$ java YourJavaBinary ; echo $?

答案 1 :(得分:9)

你应该这样做:

Test.java:

public class Test{
        public static void main (String[] args){
                System.exit(2);
        }
}

test.sh

#!/bin/bash

java Test
STATUS=$?
echo $STATUS