22

java -versionに行った結果に特別な理由はありますstderrか?

たとえば、このコマンドはWindowsのプロンプト行から実行されます。

java -version > java_version.txt

ファイルをjava_version.txt空のままにします。

java.exe編集:パラメータなしで実行した後に印刷されたヘルプでも同じことが起こります。

編集:純粋な好奇心から、私はそれが常にそのようであったかどうかをチェックしました、そしてそれは実際にそうであることがわかりました。JDK1.1.8およびJDK1.2.2に移行しますが、パラメータなしのの出力はjava -version移行しません。stderrjava.exe

4

2 に答える 2

25

java -versionの結果がstderrになる特別な理由はありますか?

AFAIK、特別な理由はありません。javaこれは、コマンドがどのように/実装されたかということです。おそらくJava1.0にまでさかのぼりますが、それを確認するのは非常に困難です。

私の簡単な調査によると、この動作はほとんどのLinuxコマンドの動作と矛盾しています...私が試した他のすべての動作は、バージョン情報にstdoutを使用しています。(結局のところ、バージョン情報は「エラー」出力ではありません。)

ただし、--version/ -versionoptionsは、正式な標準で要求されるものではなく、規則であることに注意してください。(GNUコーディング標準では、コマンドを実装--versionし、バージョン情報を標準出力に書き込む必要があると規定されています。ただし、POSIX標準では、これについては言及されておらず、LSB標準についても言及されていません。)


あなたは何ができますか/あなたはすべきですか?

  • シェルスクリプトまたはバッチファイルでstdoutではなくstderrを簡単にキャプチャできるはずです。
  • これを行うことにリスクはないはずです。Oracleは、-version顧客のスクリプトを壊さない限り、Javaツールチェーンを変更して出力をstdoutに送信することはできません。これはほとんどありません1

1-これがどれほどありそうもないことの証拠です:https ://bugs.java.com/bugdatabase/view_bug.do?bug_id=4380614 。「解決策:修正されない」...と最後のコメントに注意してください。

于 2012-11-20T22:46:35.477 に答える
3

この問題の回避策は次のとおりです。

java -version 2> java_version.txt
于 2012-11-20T22:43:48.700 に答える