首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Java系统退出值返回给bash脚本

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

Stack Overflow用户
提问于 2013-09-12 20:06:45
回答 2查看 38.5K关注 0票数 10

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

我的bash代码:

代码语言:javascript
运行
复制
 ....................
    java  bsc/cdisc/ImportData $p $e $t


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

# return to parent directory
cd ../scripts


echo "${STATUS}"

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-12 20:28:52

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

我猜你是在做这样的事情:

代码语言:javascript
运行
复制
$ java YourJavaBinary
$ ./script 

其中script仅包含:

代码语言:javascript
运行
复制
STATUS="${?}"
echo "${STATUS}"

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

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

代码语言:javascript
运行
复制
java YourJavaBinary
STATUS="${?}"
echo "${STATUS}"

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

代码语言:javascript
运行
复制
$ java YourJavaBinary ; echo $?
票数 16
EN

Stack Overflow用户

发布于 2013-09-12 20:18:08

你应该这样做:

Test.java:

代码语言:javascript
运行
复制
public class Test{
        public static void main (String[] args){
                System.exit(2);
        }
}

test.sh

代码语言:javascript
运行
复制
#!/bin/bash

java Test
STATUS=$?
echo $STATUS
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18763849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档