OS X 上的 JVM 总是以状态 0 退出(在 Bash 脚本中捕获)?
JVM on OS X always exiting with status 0 (as captured in Bash script)?
我有一个非常简单的 Java class,除了:
public class TestMain {
public static void main(String[] args) {
System.out.println("Running!");
System.exit(1111);
}
}
,打包成一个TestOSX.jar
文件。
虽然在 Windows 上我可以 运行 上面的代码片段并显示 %ERRORLEVEL%
具有预期值,但我在 OS X 上得到不同的结果。
鉴于 test.sh
包含:
#!/bin/bash
"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" -jar TestOSX.jar
wait $!
updater_exit_val=$?
echo $updater_evit_val
,我总是打印0。
设置:OS X 10.11.1,Oracle Java 8 u60。
我在这里遗漏了什么琐碎的细节?
您没有使用 &
将您的 java 进程发送到后台。因此 wait
在 java 进程退出后执行。它找不到您尝试等待的进程,因为它已经退出并因此给出 return 代码 0。 $?
returns 最后一个命令的 return 代码(在你的例子中 wait
)。
您可以从脚本中删除等待,或者通过在末尾添加 &
将 java 进程发送到后台。
我有一个非常简单的 Java class,除了:
public class TestMain {
public static void main(String[] args) {
System.out.println("Running!");
System.exit(1111);
}
}
,打包成一个TestOSX.jar
文件。
虽然在 Windows 上我可以 运行 上面的代码片段并显示 %ERRORLEVEL%
具有预期值,但我在 OS X 上得到不同的结果。
鉴于 test.sh
包含:
#!/bin/bash
"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" -jar TestOSX.jar
wait $!
updater_exit_val=$?
echo $updater_evit_val
,我总是打印0。
设置:OS X 10.11.1,Oracle Java 8 u60。
我在这里遗漏了什么琐碎的细节?
您没有使用 &
将您的 java 进程发送到后台。因此 wait
在 java 进程退出后执行。它找不到您尝试等待的进程,因为它已经退出并因此给出 return 代码 0。 $?
returns 最后一个命令的 return 代码(在你的例子中 wait
)。
您可以从脚本中删除等待,或者通过在末尾添加 &
将 java 进程发送到后台。