为什么'java -version'会转到stderr?

时间:2012-11-20 22:40:39

标签: java stdout stderr

java -version stderr的结果是否有任何特殊原因?

例如,此命令从Windows的提示行执行:

java -version > java_version.txt

将文件java_version.txt留空。

编辑:执行java.exe后没有任何参数打印出来的帮助也是如此。

编辑:出于纯粹的好奇心,我检查了它是否总是那样,事实证明它确实存在。 java -version在JDK 1.1.8和JDK 1.2.2中都转到stderr,但是没有任何参数的java.exe的输出不会。{/ p>

2 个答案:

答案 0 :(得分:16)

  

java -version的结果是否有任何特殊原因导致stderr?

AFAIK,没有特殊原因。这就是java命令的实现方式。可能一直回到Java 1.0,虽然要验证它是非常困难的。

我的简短调查显示,这种行为不一致与大多数Linux命令的行为方式有关......我尝试过的其他一切都使用stdout来获取版本信息。 (毕竟,版本信息不是“错误”输出。)

但是请注意--version / -version选项是一种约定,而不是任何正式标准所要求的。 (GNU coding standards状态命令应该实现--version并且该版本信息应该写入标准输出。但是POSIX标准没有提到这一点,也没有提到LSB标准。)


你能做什么/应该做什么?

  • 在shell脚本或批处理文件中捕获stderr而不是stdout应该很容易。
  • 这样做不应该有任何风险。 Oracle无法更改Java工具链以将-version输出发送到stdout而不会破坏客户脚本。这种情况极不可能 1

1 - 这是证明其不太可能的原因:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4380614。请注意“决议:不修复”......以及最终评论。

答案 1 :(得分:3)

此问题的解决方法是:

java -version 2> java_version.txt