11

I am trying to get the return value from a java program ( System.exit(1);) into a shell script, but it seems like its returning the jvm exit code, which is always 0, if it doesnt crash. For testing purposes, this is the very first line in my main(). Anyone know how to do this?

My bash code:

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


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

# return to parent directory
cd ../scripts


echo "${STATUS}"

Thanks

4

2 回答 2

17

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

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

$ java YourJavaBinary
$ ./script 

其中脚本仅包含:

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

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

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

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

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

$ java YourJavaBinary ; echo $?
于 2013-09-12T12:28:51.930 回答
12

你应该这样做:

测试.java:

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

测试.sh

#!/bin/bash

java Test
STATUS=$?
echo $STATUS
于 2013-09-12T12:18:08.390 回答