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


13

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

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

java javaProgram 2> error

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

cat error

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

Ответы:


16

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


1

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


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 был передан для фактических сообщений об ошибках.
Джайт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.