Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当java程序出现异常(从shellscropt运行java程序)时,如何仅打印退出代码?_Java_Bash_Shell - Fatal编程技术网

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

当java程序出现异常(从shellscropt运行java程序)时,如何仅打印退出代码?,java,bash,shell,Java,Bash,Shell,我有一个java程序,它抛出了一些异常,我尝试从shell脚本执行它,并在java程序失败时打印0,在成功执行时打印1。但它也将异常打印到控制台上。我只想打印退出代码。如何做?任何建议都将不胜感激 下面是我的Java程序和脚本文件 Test.Java public class EchoTest { public static void main (String args[]) { System.out.println ("scuccess Prasad Bezavada "+(2

我有一个java程序,它抛出了一些异常,我尝试从shell脚本执行它,并在java程序失败时打印0,在成功执行时打印1。但它也将异常打印到控制台上。我只想打印退出代码。如何做?任何建议都将不胜感激

下面是我的Java程序和脚本文件 Test.Java

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

把下面的东西拿出来

$sh Test.sh
    Exception in thread "main" java.lang.ArithmeticException: / by zero
        at EchoTest.main(EchoTest.java:3)
    0
$
预期输出如下(即只想跳过异常消息)

$sh Test.sh 0 $

试试这个

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

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

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

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

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

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

最后,根据您实际请求的忽略异常情况的执行情况,这确实会返回1或0。

警告一句:每一个其他系统都会期望成功为0,而一系列错误代码的任何其他值是shi@t_thirupathi,感谢您的响应,它只返回0(零)无论是成功还是失败,那都是因为美元?保存重定向(>)的成功代码,而不是javasentence@prasad这意味着运行java测试还有一些其他问题,因此它总是以非零方式退出(在这种情况下,脚本输出0)。@malarres否,重定向不重要。$?具有最后一个命令的退出代码,而重定向不是命令。那么,我的另一个答案比需要的更复杂。现在,您可能还想考虑甚至捕获<代码>可投掷< /代码>,而不是<代码>异常< /代码>,因为它也包含“代码>错误< /代码> s(包括例如“代码> OutOfMeMyRebug < /代码>”)。
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 Test
output = $?
# do some logic here..
if [[ $output -eq 0 ]]; then
    echo "executed"
else
    echo "exception thrown"
fi