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>
答案 0 :(得分:16)
AFAIK,没有特殊原因。这就是java -version的结果是否有任何特殊原因导致stderr?
java
命令的实现方式。可能一直回到Java 1.0,虽然要验证它是非常困难的。
我的简短调查显示,这种行为不一致与大多数Linux命令的行为方式有关......我尝试过的其他一切都使用stdout来获取版本信息。 (毕竟,版本信息不是“错误”输出。)
但是请注意--version
/ -version
选项是一种约定,而不是任何正式标准所要求的。 (GNU coding standards状态命令应该实现--version
并且该版本信息应该写入标准输出。但是POSIX标准没有提到这一点,也没有提到LSB标准。)
你能做什么/应该做什么?
-version
输出发送到stdout而不会破坏客户脚本。这种情况极不可能 1 。1 - 这是证明其不太可能的原因:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4380614。请注意“决议:不修复”......以及最终评论。
答案 1 :(得分:3)
此问题的解决方法是:
java -version 2> java_version.txt