Esse buffer é feito pelo pipe quando o descritor envolvido não é um tty. Alguns comandos têm opções específicas para lidar com isso e forçar um comportamento interativo.
Maneira genérica de lidar com isso
Você pode usar stdbuf do GNU Coreutils. Ele gerencia o buffer de stdin , stdout e stderr . Você pode desabilitá-lo completamente definindo-o como 0 ou usar um buffer de linha definindo-o como L :
stdbuf -i0 -o0 -e0 command
stdbuf -oL ping example.com
Esse comando funciona definindo setvbuf() por meio de LD_PRELOAD hack. Se o comando chamado chamar forçosamente essa função novamente, stdbuf poderá falhar ao desabilitar o buffer.
Você também pode usar o comando unbuffer para obter basicamente o mesmo resultado. Este comando está relacionado a expect e pode não ser instalado por padrão. Pode ser usado basicamente da seguinte forma:
unbuffer command
Opções específicas de comandos
Em relação ao buffer específico do comando, veja como desativá-lo:
A opção - GNU
grep desativa o buffer: --line-buffered
A opção - GNU
sed desativa o buffer: -u
- O GNU
awk não é armazenado em buffer quando não há controle tty.
-
mawk , o padrão awk para - pelo menos - Debian / Ubuntu, faz buffer de saída. mawk may não funciona com stdbuf e fornece uma opção -Winteractive para desativar o armazenamento em buffer.