为什么’java -version’会转到stderr?
java -version
的结果有没有特殊的原因进入stderr
?
例如,此命令从Windows的提示行执行:
java -version > java_version.txt
将文件java_version.txt
留空。
编辑:执行没有任何参数的java.exe
后打印出来的帮助也是如此。
编辑:出于纯粹的好奇心,我检查了它是否总是那样,事实certificate它确实存在。 java -version
在JDK 1.1.8和JDK 1.2.2中都转到stderr
,但java.exe
的输出没有任何参数。
java -version的结果有没有特殊的原因进入stderr?
AFAIK,没有特殊原因。 这就是java
命令的实现方式。 可能一直回到Java 1.0,虽然要validation它是非常困难的。
我的简短调查表明,这种行为与大多数Linux命令的行为方式不一致 ……我尝试过的其他一切都使用stdout来获取版本信息。 (毕竟,版本信息不是“错误”输出。)
但请注意--version
/ -version
选项是一种约定,而不是任何正式标准所要求的。 ( GNU编码标准声明命令应该实现--version
并且版本信息应该写入标准输出。但POSIX标准没有提到这一点,LSB标准也没有。)
你能做什么/应该做什么?
- 在shell脚本或批处理文件中捕获stderr而不是stdout应该很容易。
- 这样做应该没有任何风险。 Oracle无法更改Java工具链以将
-version
输出发送到stdout,而不会破坏客户脚本。 这极不可能1 。
1 – 以下证据表明它不太可能: http : //bugs.sun.com/bugdatabase/view_bug.do?video_id = 4380614 。 请注意“决议:不修复”……以及最终评论。
此问题的解决方法是:
java -version 2> java_version.txt