Isso será difícil de fazer sem escrever um aplicativo adequado que use ncurses ou similares para controlar o terminal. Com o bash, você pode obter um pouco desse efeito com o seguinte script:
#! /bin/bash
height=${1:-5}
# Buffer up to the height
do_height()
{
for ((i = 0; i < height; i++))
do
"$@"
done
}
do_height printf "%-${cols}s\n" ""
# Get dimensions of terminal
cols=$(tput cols)
lines=$(tput lines)
sudo apt-get update |&
while IFS= read -r line
do
sleep 0.01
if [[ $line =~ ^(Hit|Get|Fetch|Read) ]]
then
out=("$line" "${out[@]:0:4}")
else
out=("" "${out[@]:0:4}")
tput cup $((lines - height - 1)) 0
printf "%-${cols}s\n" "$line"
do_height printf "%-${cols}s\n" ""
fi
tput cup $((lines - height - 1)) 0
for ((i = height - 1; i >= 0; i--))
do
printf "%-${cols}s\n" "${out[i]}"
done
done
Executar como foo.sh N
, onde N é o número de linhas que você deseja manter. Note que:
- isso pressupõe que você esteja na parte inferior do terminal.
- erros sempre serão impressos N linhas acima da última linha.
-
apt-get
fornece uma saída mais transitória quando está imprimindo em um terminal, então a saída aqui parecerá espasmódica, já que as linhas intermediárias não estão disponíveis.
Assim, o resultado final será parecido com: