【发布时间】:2011-09-17 02:14:49
【问题描述】:
我有一个 jar 说 test.jar,它的主类是 TestJar,一个 shell 脚本 jar_executor.sh 和一个 java 文件。如果我们将 1 作为参数传递,我的 test.jar 将返回 1,如果我们传递任何其他值,则返回 2。 我的 shell 脚本正在执行 test.jar 如下
#!/usr/bin/ksh
java TestJar 1 -cp test.jar
return_code=$?
exit $return_code
在 java 文件中,我正在创建一个进程并执行 shell 脚本并使用以下代码获取其退出值
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec(sh jar_executor.sh);
int exitVal = process.waitFor();
System.out.println(exitVal);
这个 exitVal 变量应该根据我们传递的参数打印 1 或 2,但它每次都打印 255。
如果我在 shell 脚本中使用echo $return_code,那么我得到的值是正确的。
请帮助我为什么使用exit 获得价值 255。提前谢谢!!!
【问题讨论】:
-
255 表示退出代码遥不可及,我认为参数正在一起传递或其他东西
-
执行 shell 脚本的更简单方法是
set -e; java TestJar 1 -cp test.jar。 -e 选项意味着如果任何命令以非零状态退出,bash 将立即以该状态退出。这有点像 shell 脚本的异常处理。