要么是我在做傻事,要么是 Sun 在做傻事。为什么会出现这样的情况:
java -version > version.txt
仍然打印到 stdout 并且 version.txt 为空?我检查了退出代码,它仍然是 0,所以这不是写入 stderr。
我需要这个,因为我正在构建一个测试环境工具,并且想要检查 Java 版本是否足够,我本来打算捕获该版本的输出,但现在我被卡住了。
我在使用 OS X Leopard,Java 版本 1.6.0_20。
有任何想法吗?
答案1
java -version &> version.txt
退出代码与其输出的位置无关。
答案2
这现在是一种特色。;-)
在修复这个错误之前,我们应该非常非常仔细地考虑。将版本信息打印到 stderr 显然是错误的,但由于我们从一开始就这样做,如果我们现在改变它,我们很可能会破坏基于 Java 构建的现有系统。如果我们决定改变这一点,那么必须等到 Tiger 发布,以便进行充分的测试。
答案3
作为对 Ignacio 答案的补充:
解析输出java -version
相当复杂且容易出错(并且不能保证输出始终具有相同的格式,尤其是对于非 Sun JVM)。
要检查 Java 版本,您可以运行一个小型 Java 程序来检查相应的系统属性:请参阅 Javadocs获取属性()。这是获取有关 Java 环境信息的官方、有据可查的方法。您可能想检查一下:
- java.version(Java 安装的确切版本号,例如 1.6.0_15 )
- java.specification.version(Java 平台版本,例如 1.5 或 1.6)