我试图将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}"
由于
答案 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