Tubulação que não pega stdout

1

Estou executando um programa em java a partir de um terminal OS X 10.8 bash e estou tentando redefinir a saída que ele está produzindo.

No entanto, quando você está executando isso através de um pipe ou rederecionando-o para um arquivo, a saída está em branco, no entanto, 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 de modo que esteja gravando em outro fluxo diferente de stdout , mas um fluxo que ainda produza saída no terminal. Isso é possível?

    
por Theodor 02.10.2013 / 14:32

1 resposta

4

Existem três arquivos padrão abertos para cada programa, stdin (entrada padrão), stdout (saída padrão) e stderr (erro padrão). Grava para stdout e stderr é enviada no terminal por padrão.

É uma convenção comum escrever erros e mensagens de log em stderr em vez de stdout para não misturar mensagens de log ou erro com a saída real do programa. Você pode redirecionar stderr usando 2> , por exemplo:

command 2> log
    
por 02.10.2013 / 14:53