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
输出不会。 最佳答案
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-这是不太可能的证据:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=4380614。请注意“解决方案:无法修复” ...和最终注释。
关于java - 为什么“java -version”进入stderr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57525404/