当java程序给出异常(从shellscropt运行java程序)时,如何只打印退出代码?

时间:2015-07-29 05:55:50

标签: java bash shell

我有一个抛出一些异常的java程序,我尝试从shell脚本执行它并在失败时打印0和在成功执行java程序时打印1。但是它还将Exception打印到控制台上我只想打印退出代码。怎么做?。感谢任何建议。

以下是我的Java程序和脚本文件 Test.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 Test.sh 0 $

3 个答案:

答案 0 :(得分:2)

试试这个。

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

答案 1 :(得分:1)

你必须抓住例外。之后,您将能够准确输出您想要的内容。在你的例子上:

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
    }
}
} 

答案 2 :(得分:0)

首先,您希望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,具体取决于执行忽略异常情况,这是您实际请求的内容。