Limpando o buffer de rolagem "antigo"

1

Isso pode parecer uma pergunta duplicada, mas não é.

Eu sei que posso usar printf "3f" para limpar o buffer de rolagem da sessão "atual", mas isso não funciona para sessões antigas.

Meu problema é acessar várias VMs através do visualizador XVP (um VNC baseado no navegador da web java) e se não fizer um esforço para limpar a tela antes de sair toda vez que tudo puder ser visualizado rolando a tela.

Por favor, sugira uma maneira de limpar esse antigo buffer de rolagem.

PS: Reinicialização limpa mas não posso fazer isso em VMs de produção

    
por Jesin 20.08.2013 / 18:11

2 respostas

1

Em vez de pular várias linhas, o kernel do Linux já suportou (pelo menos 2011) uma seqüência de controle que limpará a rolagem:

printf '3[3J'

É mencionado nas alterações ncurses para 16 de julho de 2011 :

    + add E3 extended capability to linux-basic (Miroslav Lichvar)
    + add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD

e explicado no banco de dados do terminal :

# The 3.0 kernel adds support for clearing scrollback buffer (capability E3).
# It is the same as xterm's erase-saved-lines feature.
linux3.0|linux 3.0 kernels,
        E3=\E[3J, use=linux2.6,

Surgiu no contexto de um relatório de bug, onde foi notado que um recurso adicionado ao xterm em junho de 1999 seria útil para melhorar a segurança dos aplicativos no console do Linux.

Posteriormente (em 2013 ), o recurso E3 foi adicionado à utilidade clear , de modo que (dependendo de qual descrição de terminal é usada) o utilitário limparia a rolagem. O comentário sobre Ctrl + l refere-se a um atalho bash que pode codificar a mesma seqüência de escape (já que o banco de dados do terminal não associa os recursos clear (ou ed ) e E3 ) .

Leitura adicional:

por 14.11.2016 / 10:43
0

Eu encontrei outra maneira de fazer isso. Basicamente, a tela do console tem 510 linhas de buffer (no meu caso), então echo ing 511 vezes preenche todas as linhas limpando os dados antigos.

Estou usando echo dentro de um for loop

for i in {0..510}
 do
    echo
 done

Em prompts bash antigos, seq pode ser usado.

for i in 'seq 0 510'
 do
    echo
 done
    
por 01.09.2013 / 20:45