O redirecionamento do Stderr não funciona

2

Estou tentando redirecionar o stderr de um comando mbuffer para um arquivo. Não está funcionando; a saída stderr ainda aparece na tela e o errors.txt está vazio. Meu comando está abaixo:

$ raspivid -w 1280 -h 720 -o - | mbuffer -m 60M -f -o /tmp/temp_video.h264 2> errors.txt &
[2] 5278
in @ 1006 KiB/s, out @ 1006 KiB/s, 9292 KiB total, buffer   0% full^C
in @  0.0 KiB/s, out @  0.0 KiB/s,  9.9 MiB total, buffer  17% full^C

FYI, a saída stderr que estou tentando redirecionar é "em @ 1006 KB / s ...."

O que eu fiz de errado? Obrigado!

    
por user2989813 30.03.2017 / 06:08

2 respostas

4

Você não fez nada de errado, mbuffer reabre /dev/tty se ele não pode ler seu erro padrão , derrotando seu redirecionamento.

Você pode usar a opção -q para desativar a saída de status. De acordo com a documentação, você poderia usar -l para registrar o status em um arquivo com

mbuffer -m 60M -f -o /tmp/temp_video.h264 -l errors.txt &

mas o log de status está com bugs: ele sempre vai para o erro padrão , não o log.

Veja como corrigir isso.

  1. Faça o download da fonte do pacote

    apt-get source mbuffer
    
  2. Adicione um patch (isso requer o pacote quilt )

    cd mbuffer-20161115
    quilt new 13-status-log.patch
    quilt add mbuffer.c
    
  3. Edite mbuffer.c e mude a linha 461 (no Debian 8) ou 472 (no Debian 9) para

    nw = write(Log,buf,strlen(buf));
    
  4. Guarde o patch

    quilt refresh
    
  5. Reconstrua o pacote (isso requer os pacotes dpkg-dev e devscripts )

    dch -n "Fix the status log to honour the -l option."
    dch -r ignored
    dpkg-buildpackage -us -uc
    

    (se dpkg-buildpackage reclamar sobre as dependências ausentes, instale-as e tente novamente)

  6. Instale o pacote atualizado

    sudo dpkg -i ../mbuffer_*-?.1_*.deb
    
por 30.03.2017 / 06:51
0

Eu sou o autor do mbuffer e só quero salientar que o log de status não é buggy. A intenção era sempre evitar o registro de mensagens de status no log, pois estraga o log e o torna ilegível, a menos que o usuário o solicite explicitamente.

Isso é feito, aumentando a verbosidade para o nível 4 com "-v 4".

Como o comportamento padrão causa confusão e há também a opção -Q para suprimir mensagens de status no log, estou considerando incluir mensagens de status no log em uma versão futura também no nível de detalhamento 3.

Atenciosamente,

Thomas

    
por 05.04.2017 / 11:12