Java コンパイラの出力をファイルにリダイレクトしようとしています。私はそれが本来あるべきだと思った:
javac file.java > log.txt
か何か。代わりに、ターミナルにすべての出力が表示され、log.txt には何も表示されません!
また、エラーもログに記録したい場合は、そうしますか
javac file.java 2>&1 > log.txt
?
javac file.java 2> log.txt
その理由は、出力ファイル記述子が 1 つではなく2 つあるためです。通常のものは stdout で、> でリダイレクトでき、結果の出力に使用されるはずです。2 番目の stderr は、警告、エラー、現在のステータスなど、人間が読める形式の出力用で、これは 2> でリダイレクトされます。
2>&1 を使用する 2 行目は、stderr を stdout にリダイレクトし、最後に stdout を log.txt にリダイレクトします。
やってみました
javac -Xstdout log.txt file.java
これにより、コンパイラ エラーが stderr ではなくログ ファイルに送信されます。