我有一个抛出一些异常的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 $
答案 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,具体取决于执行忽略异常情况,这是您实际请求的内容。