Existe alguma maneira de limpar o número específico de linhas em um terminal?

0

Este é o caso de uso:

  1. Um script node.js limpa o console.
  2. Em seguida, ele envia alguns metadados para o console. ( Nome do módulo e tagline . Mais ou menos como o cabeçalho de um aplicativo.)

  3. Envia dados passados para o console. (Mais ou menos como o conteúdo inicial de um aplicativo, que, desde o passado, não será alterado após a emissão. Pelo menos, não até sair.)

  4. Ele faz o que é esperado, para que o módulo foi feito e canaliza isso para o console também.

O passo 4 é um processo contínuo. E, portanto, você pode pensar no Passo 4 como se fosse um relógio . Após cada segundo, o relógio é reiniciado e exibe o novo horário.

3c teria funcionado bem se a Etapa 1-3 não estivesse lá. Mas eles são, e a única maneira que posso pensar é imprimir todos os dados novamente.

Funciona, mas não é o código com maior desempenho. Então, existe alguma maneira de eu limpar o resultado do Passo 4, e depois reimprimi-lo com as mudanças?

Nota: A última linha do terminal não é necessariamente a última linha do programa.

    
por Abhishek Soni 17.07.2017 / 11:09

1 resposta

1

3c would have worked fine if Step 1-3 weren't there.

3 é o caractere de código de controle% ASCIIEscape. Eu acredito que Escape c é a sequência de comandos do terminal ANSI para reiniciar o terminal.

Provavelmente, você pode emitir um CR (retorno de carro) para mover o cursor para a margem esquerda, seguido por Escape [ K (limpar até o final da linha).

Se a saída da etapa 4 for de várias linhas, você precisará emitir os comandos apropriados para mover o cursor para linha, coluna e limpar até o final da tela.

Uma busca por "códigos de controle de terminal ANSI" deve encontrar material de referência útil.

I need ... some sort of a bash command

man tput

considere

$ echo aaa bbb ccc 'tput cr'xxx
xxx bbb ccc

$ echo aaa bbb ccc 'tput cr'xxx 'tput el'
xxx

ou

$ echo aaa bbb ccc; echo ddd eee fff
aaa bbb ccc
ddd eee fff

$ echo aaa bbb ccc; echo ddd eee fff; echo 'tput cup 23 3' ZZZ
aaa bbb ccc
ddd ZZZ fff

ou

$ echo aaa bbb ccc; echo ddd eee fff; echo 'tput cup 22 3' ZZZ 'tput ed'
aaa ZZZ

onde os códigos de recurso usados são

  • cr = retorno de carro (cursor para a margem esquerda).
  • el = limpar do cursor para o final da linha.
  • cup = posicionamento do cursor.
  • ed = limpar do cursor para o final da tela.

Esses códigos de recurso estão listados em man terminfo .

Se você quiser saber o que tput está fazendo, pode fazer algo como

$ (tput cup 23 3; echo) | cat -v
^[[24;4H

Em que ^[ representa o código de controle Escape (\ 033).

Isso lhe dará valores que você pode usar da maneira que você pretendia usar em 3c

    
por 17.07.2017 / 12:16