Как мне перенаправить только stderr?

13

У меня немного проблем с этим. Мне нужно запустить скомпилированный файл .java и перенаправить только stderr в файл с именем error. Таким образом, файл .java называется javaProgram.java.

Вот что я попробовал:

java javaProgram 2> error

Однако когда я

cat error

кажется, что там есть вещи, даже когда я точно знаю, что в конкретном файле .java нет ошибок. Я делаю что-то неправильно? Все, что я хочу, чтобы этот файл ошибок отображался - это ошибки, а не что-нибудь еще.

Джон
источник

Ответы:

16

Ваша первая попытка была правильной; 2>filenameкак вы перенаправляете stderr. Это может быть случай, когда ваша программа записывает некоторые ошибки в stderr, или java-программа запускает другие программы, которые выводят в stderr.

Марк Плотник
источник
1

Простой ответ заключается в том, что это невозможно. Стандартная ошибка используется для записи результатов диагностики, и приложения должны определить, что такое вывод диагностики / ошибки. Это в соответствии со стандартом POSIX .

Jeight
источник
2
Если вы собираетесь ссылаться на спецификацию POSIX, пожалуйста, укажите конкретный раздел, а не весь документ. Это огромная.
Иордания
С каких это пор невозможно перенаправить stderr в файл в POSIX? Вы должны будете предоставить фактическую цитату для этого.
10
1
@ l0b0 это не то, что говорит Джайт. Приложения должны решать, что идет в STDOUT, а что в STDERR; например, было бы вполне возможно засунуть все в STDOUT, и тогда перенаправление STDERR не будет иметь никакого эффекта. Или, как в этом случае, возможно (и стандартная практика) поместить некоторые вещи, которые не являются строго ошибками, в STDERR. Единственный способ, которым можно было бы проанализировать ошибки из другой диагностики, был бы, если ошибки помечены как «ОШИБКА:» или что-то еще. Там может быть переключатель многословия, который может помочь, но это зависит от программы.
evilsoup
OP поставил две семантически разные проблемы: «перенаправить только stderr в файл с именем error» и «я хочу, чтобы этот файл ошибок отображал ошибки, а не что-нибудь еще». Первая часть этого конечно не невозможна, моя точка зрения.
10
@ l0b0 Ты получил это задом наперед. ОП определенно может перенаправить stderr в файл с именем error. Он не может выбрать, что выводит Java в качестве stderr, потому что содержимое stderr контролируется приложением, а не пользователем. Что он может сделать, так это grep файл, в который stderr был передан для фактических сообщений об ошибках.
Джайт