java -version 不写入标准输出?

Jua*_*ado 2 java stdout macos

要么我在做一些愚蠢的事情,要么 Sun 是。怎么会像这样:

java -version > version.txt
Run Code Online (Sandbox Code Playgroud)

仍然打印到标准输出并将 version.txt 留空?我正在检查退出代码,它仍然是 0,所以这不是写入 stderr。

我需要这个,因为我正在构建一个测试环境工具并想检查 Java 的版本是否足够,我计划捕捉该版本的输出,但现在我被卡住了。

我使用的是 OS X Leopard,Java 版本 1.6.0_20。

有任何想法吗?

Ign*_*ams 9

java -version &> version.txt
Run Code Online (Sandbox Code Playgroud)

退出代码与其输出的位置无关。

  • @Ash:**`2>&1` 在兼容 POSIX 的 shell 中是一样的**(`bash`、`zsh`、`ash`)。语法是`x>&y`,其中`x` 和`y` 是文件描述符(`1` 表示stdout,`2` 表示stderr)。只有 `>&` 和 `&>` 是 `bash` 特定的扩展(这两个都意味着 `1>somefile 2>&1`) (2认同)

Arj*_*jan 9

这是当今的一种功能。;-)

一个古老的错误报告

在修复这个错误之前,我们应该非常非常仔细地考虑。将版本信息打印到 stderr 显然是错误的,但由于我们从一开始就一直在这样做,如果我们现在更改它,我们似乎可能会破坏构建在 Java 之上的现有系统。如果我们决定改变这一点,那么它必须等到 Tiger 发布,以便进行充分的测试。