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

mik*_*628 8 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}"
Run Code Online (Sandbox Code Playgroud)

谢谢

P.P*_*.P. 13

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

我猜你在做的事情如下:

$ java YourJavaBinary
$ ./script 
Run Code Online (Sandbox Code Playgroud)

脚本仅包含的位置:

STATUS="${?}"
echo "${STATUS}"
Run Code Online (Sandbox Code Playgroud)

这里,script在子shell中执行.因此,当您执行脚本时,$?该shell中的last命令的值是子shell中的任何内容.因此,它总是回归0.

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

java YourJavaBinary
STATUS="${?}"
echo "${STATUS}"
Run Code Online (Sandbox Code Playgroud)

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

$ java YourJavaBinary ; echo $?
Run Code Online (Sandbox Code Playgroud)


Dan*_*ñoz 9

你应该这样做:

Test.java:

public class Test{
        public static void main (String[] args){
                System.exit(2);
        }
}
Run Code Online (Sandbox Code Playgroud)

test.sh

#!/bin/bash

java Test
STATUS=$?
echo $STATUS
Run Code Online (Sandbox Code Playgroud)