让我们尝试重定向java
的标准错误:
java -version 2> ~/error.txt
error.txt
中记录了版本信息。
让我们尝试重定向标准输出:
java -version > ~/output.txt
output.txt
是空的。
为什么java
二进制文件将正常输出打印到错误流中?
让我们尝试重定向java
的标准错误:
java -version 2> ~/error.txt
error.txt
中记录了版本信息。
让我们尝试重定向标准输出:
java -version > ~/output.txt
output.txt
是空的。
为什么java
二进制文件将正常输出打印到错误流中?
-version
选项,但后者指示JVM在显示版本信息后退出。-showversion
选项,但后者在显示版本信息后不指示JVM退出。-showversion
,Java 允许版本信息被打印在正在运行的应用程序旁边。然而,如果版本信息被打印到 stdout
,它将与正常的应用程序输出难以区分,并迫使您自行扫描并删除该输出行。当然,使用 -version
而不是 -showversion
,版本字符串很可能是预期的输出,但保持一致性本身就是一个不错的结束。VERSION=$(java -version 2>&1)
-version
,--version
,-showversion
和--showversion
。version
和showversion
都具有相同的效果,但只使用一个破折号时会输出错误,而使用两个破折号则都会正常输出并且可以存储到变量中。如果出于某种原因您想要获取错误输出并将其存储到变量中,可以像这样操作:Invoke-Expression "java -version" -ErrorVariable javaVaraible java : openjdk version "11.0.1" 2018-10-16 ... $javaVaraible java : openjdk version "11.0.1" 2018-10-16 ...- Thibault
mvn -v > ~/output.txt # 可以正常工作
有个错误报告,但已被关闭。可能Oracle无法解决这个问题,因为这可能会对期望其按照这种方式运行的系统造成问题。