【问题标题】:How to print only exit code ,when java program gives exception(running java program from shellscropt)?当java程序给出异常(从shellscopt运行java程序)时,如何只打印退出代码?
【发布时间】:2015-07-29 05:55:50
【问题描述】:

我有一个抛出一些异常的java程序,我尝试从shell脚本执行它并在失败时打印0,在成功执行java程序时打印1。但它也在控制台上打印异常我只想打印退出代码.如何做到这一点?。任何建议表示赞赏。

以下是我的 Java 程序和脚本文件 测试.Java

public class EchoTest {
    public static void main (String args[]) {
    System.out.println ("scuccess Prasad Bezavada "+(2/0));
    }
} 

Test.sh(脚本文件)

java Test
if [ $? -eq 0 ]
then echo "1"
else echo "0"
fi

得到以下输出

$sh Test.sh
    Exception in thread "main" java.lang.ArithmeticException: / by zero
        at EchoTest.main(EchoTest.java:3)
    0
$

预期输出如下(即只想跳过异常消息)

$sh 测试.sh 0 $

【问题讨论】:

  • 一句警告:所有其他系统都期望 0 表示成功,任何其他值表示一系列错误代码

标签: java bash shell


【解决方案1】:

试试这个。

java Test 2> /dev/null
if [ $? -eq 0 ]
then echo "1"
else echo "0"
fi

【讨论】:

  • 嗨@t_thirupathi,感谢您的回复,它在成功和失败的情况下都返回0(零)
  • 那是因为 $?保存重定向成功代码(>)而不是java语句
  • @prasad 这意味着运行 java Test 存在一些其他问题,因此它总是以非零值退出(在这种情况下脚本输出 0)。
  • @malarres 不,重定向无关紧要。美元?有最后一个命令的退出代码,重定向不是命令。
  • 那么我的其他答案比需要的更复杂。将立即删除
【解决方案2】:

您必须捕获异常。之后,您将能够准确地输出您想要的内容。在你的例子:

public class EchoTest {
public static void main (String args[]) {
    try{
        System.out.println ("scuccess Prasad Bezavada "+(2/0));
    } catch (Exception e){
        // doing nothing is ok for your intended behaviour
    }
}
} 

【讨论】:

  • 您可能还想考虑捕捉Throwable 而不是Exception,因为它还包括Errors(例如包括OutOfMemoryError)。
【解决方案3】:

首先,您希望您的 Java 程序返回一个值(1 或 0)。 在我们的例子中,我们将考虑如果抛出异常,则返回 1,否则返回 0。此外,异常将被隐藏(这是一种不好的做法。至少如果您不愿意在屏幕上显示异常,则应始终记录异常)

public class EchoTest {
    public static void main (String args[]) {
        try {
            System.out.println ("scuccess Prasad Bezavada "+(2/0));
            System.exit(0);
        }
        catch (Exception e) {
            // log your exception here
            System.exit(1);
        }
    }
} 

完成此操作后,您需要做的就是获取 java 的输出代码。

java Test
output = $?
# do some logic here..
if [[ $output -eq 0 ]]; then
    echo "executed"
else
    echo "exception thrown"
fi

最后,这确实会返回 1 或 0,具体取决于执行忽略异常情况,这是您实际要求的。

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 2023-03-12
    • 2010-10-10
    • 2011-01-22
    相关资源
    最近更新 更多