Пытается захватить вывод javac в оболочке bash

Я пытаюсь перенаправить выход компилятора java в файл. Я думал, что это должно быть:

javac file.java > log.txt

или что-то в этом роде. Вместо этого я вижу весь вывод на терминале и ничего в log.txt!

Кроме того, если я хочу также регистрировать ошибки, выполняю ли я

javac file.java 2>&1 > log.txt

?

Ответ 1

javac file.java 2> log.txt

Причина в том, что у вас есть два дескриптора выходных файлов вместо одного. Обычным является stdout, который вы можете перенаправить с помощью > и он должен использоваться для результирующего вывода. Второй, stderr, предназначен для чтения человеком, как предупреждения, ошибки, текущий статус и т.д., Этот перенаправляется с помощью 2 > .

Вторая строка, используя 2 > & 1, перенаправляет stderr в stdout и, наконец, stdout в log.txt.

Ответ 2

Вы пробовали

javac -Xstdout log.txt file.java

Это отправит ошибки компилятора в файл журнала вместо stderr.