gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:28 25 4
gpt4 key购买 nike

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 的输出没有任何参数不要。

最佳答案

Is there any special reason for the results of java -version going to stderr?

据我所知,没有特殊原因。这正是 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 9 中,他们引入了一些新的“版本”命令行选项。如果你运行 java -help 2>&1 | grep version 针对 Java 11 安装,您将看到以下内容:

$ java -help 2>&1 | grep version
-version print product version to the error stream and exit
--version print product version to the output stream and exit
-showversion print product version to the error stream and continue
--show-version
print product version to the output stream and continue.

因此,如果您使用的是 Java 11 LTS 或更高版本,解决方案是使用 --version 而不是 -version 来获取版本信息。

关于java - 为什么 'java -version' 会转到 stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com