stderr não redirecionado para stdout

1

Eu executo um servidor TACACS + que envia informações de depuração para stderr . Como gostaria de obter dados específicos dessas informações de depuração, redirecionei stderr para stdout : tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1 . No entanto, parece que ele não foi para stdout , porque se eu executar tac_plus -f /usr/local/etc/tac_plus.cfg 2>&1 | cat , não vejo saída alguma. Por outro lado, ( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z' funciona como esperado:

$ ( echo blah >&2 ) 2>&1 | tr 'a-z' 'A-Z'
BLAH
$ 

Alguém poderia explicar esse comportamento? Shell é bash versão 4.2.37.

    
por Martin 31.05.2016 / 17:03

1 resposta

2

Se olharmos para as fontes , poderemos ver a função report() que é usado para imprimir mensagens pode ser configurado para gravar em stderr ou usar syslog(3) para obtê-las registradas. Também depende do nível de registro que você configura. Você pode ver se o comando está fazendo alguma gravação ou chamada syslog com, por exemplo:

strace -e write,connect -o /tmp/out tac_plus ...

Procure o arquivo tmp para linhas como write(1,... ou outros números, provavelmente 1 para stdout, 2 para stderr e 3 ou mais para syslog , pois ele é implementado abrindo um soquete com connect() e gravando nele .

    
por 01.06.2016 / 16:40