Como redireciono apenas o stderr?

13

Estou com problemas para fazer isso. Sou obrigado a executar um arquivo .java compilado e redirecionar apenas o stderr para um arquivo chamado error. Portanto, o arquivo .java é denominado javaProgram.java.

Isto é o que eu tentei:

java javaProgram 2> error

No entanto, quando eu

cat error

parece que há coisas lá, mesmo quando eu sei que o arquivo .java específico não possui erros. Estou fazendo algo errado? Tudo o que eu quero que esse arquivo de erro exiba são erros, nada mais.

John
fonte

Respostas:

16

Sua primeira tentativa foi correta; 2>filenameé assim que você redireciona o stderr. Pode ser que o seu programa esteja gravando alguns erros não no stderr ou o programa java esteja executando outros programas que saem para o stderr.

Mark Plotnick
fonte
1

A resposta simples é que não é possível. O erro padrão é usado para gravar a saída de diagnóstico e cabe aos aplicativos definir o que é saída de diagnóstico / erro. Isso está de acordo com o padrão POSIX .

Jeight
fonte
2
Se você citar a especificação POSIX, cite uma seção específica e não o documento inteiro. É enorme.
Jordanm #
Desde quando não é possível redirecionar o stderr para o arquivo no POSIX? Você precisará fornecer uma cotação real para isso.
L0b0 04/11
1
@ l0b0 não é isso que Jeight está dizendo. Cabe aos aplicativos decidir o que vai para STDOUT e o que vai para STDERR; seria inteiramente possível inserir tudo no STDOUT, por exemplo, e depois redirecionar o STDERR não teria efeito. Ou, como neste caso, é possível (e prática padrão) colocar algumas coisas que não são estritamente erros no STDERR. A única maneira de analisar os erros de outros diagnósticos seria se eles estivessem marcados com 'ERRO:' ou algo assim. Pode haver uma opção de verbosidade que possa ajudar, mas isso é específico do programa.
precisa saber é o seguinte
O OP apresentou dois problemas semanticamente diferentes: "redirecionar apenas stderr para um arquivo chamado error" e "Quero que esse arquivo de erro seja exibido são erros, e não mais nada". A primeira parte disso certamente não é impossível, é o meu ponto.
L0b0
@ l0b0 Você conseguiu isso de trás para frente. O OP definitivamente pode redirecionar o stderr para um arquivo chamado error. Ele não pode escolher o que o Java gera como stderr porque o conteúdo do stderr é controlado pelo aplicativo e não pelo usuário. O que ele pode fazer é grep o arquivo ao qual o stderr foi passado para obter mensagens de erro reais.
9138 Jeight