Pipe não pega stdout

Pipe não pega stdout

Estou executando um programa Java a partir de um OS X 10.8terminal bash e tentando redirecionar a saída que ele está produzindo.

No entanto, ao executar isso através de um pipe ou redirecioná-lo para um arquivo, a saída fica em branco, mas vejo a saída no terminal.

Para ilustrar isso:

> java program.java
13/10/02 14:18:30 WARN some
13/10/02 14:18:30 INFO log
13/10/02 14:18:30 INFO messages
...

> java program.java > log
> cat log
>

O programa Java pode ser configurado para gravar em outro fluxo que não seja stdout, mas um fluxo que ainda produz saída no terminal. É possível uma coisa dessas?

Responder1

trêsarquivos padrão abertos para cada programa, stdin(entrada padrão), stdout(saída padrão) e stderr(erro padrão). Grava em ambos stdoute stderré gerado no terminal por padrão.

É uma convenção comum gravar erros e mensagens de log em stderrvez de, stdoutpara não misturar mensagens de log ou de erro com a saída real do programa. Você pode redirecionar stderrusando 2>, por exemplo:

command 2> log

informação relacionada