为什么“Java的版本”去标准错误?(Why does 'java -version'

2019-06-21 06:00发布

是否有结果的任何特殊原因java -versionstderr

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

java -version > java_version.txt

离开文件java_version.txt空。

编辑:同样的情况与执行后打印出帮助java.exe不带任何参数。

编辑:只是出于纯粹的好奇心我检查是否已总是这样的,它变成了它实际上有。 java -versionstderr在JDK 1.1.8,并在JDK 1.2.2,但的输出java.exe不带任何参数没有。

Answer 1:

是否有Java的版本要去标准错误结果的任何特殊原因?

据我所知,没有什么特殊的原因。 这是多么java命令来实现/。 也许所有的回Java 1.0的方式,虽然这将是非常困难的验证。

我简短的调查表明,这种行为是如何大多数的Linux命令的行为标准输出版本信息......一切我已经试过用途不一致 。 (毕竟,版本信息不是“错误”输出。)

但是请注意, --version / -version选项可以通过任何正式的标准所要求的约定,而不是东西。 (在GNU编码标准是命令应该执行国家--version和版本信息应该被写入标准输出,但POSIX标准没有提到这一点,也没有了LSB标准)。


有什么可以/应该怎么做?

  • 它应该很容易捕捉到标准错误而不是标准输出在你的shell脚本或批处理文件。
  • 不应该有在做这个风险。 Oracle无法更改Java工具链发送-version输出到标准输出没有可能破坏用户的脚本。 这是极不可能1。

1 -这是多么的不可能是证据: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4380614 。 请注意“解决方案:无须改正” ......而最后的评论。



Answer 2:

对于这个问题的解决方法是:

java -version 2> java_version.txt


文章来源: Why does 'java -version' go to stderr?