'unbuffer' ou 'stdbuf' para remover buffer de stdout?

12

Existe alguma diferença entre unbuffer (1) e stdbuf (1)? Pelo que eu entendi, unbuffer faz mais do que o "melhor esforço" de chamar a função libc set (X) no início, e depois deixar as coisas serem?

    
por dan3 23.10.2013 / 19:25

1 resposta

13

Eles trabalham de maneiras completamente diferentes.

Os usos do unbuffer do programa esperam executar o comando nomeado. Como o expect cria uma pseudo-tty para anexar ao stdout do processo filho, o filho pode ser levado a pensar que deve usar o buffer de linha em vez do buffer de bloco. Alguns programas mudam seu comportamento quando isatty (stdout) é verdadeiro, outros não, e é muito difícil saber qual vai e o que não vai.

O programa stdbuf tenta colocar libstdbuf na frente da libc para binários carregados dinamicamente. Onde libstdbuf redefine a estratégia de buffer padrão das chamadas libc stdio.

Eu descobri isso por

 apt-get source expect coreutils

e lendo a fonte relevante para cada programa.

    
por 23.10.2013 / 22:26