Como faço para sair do topo sem deixar a saída no terminal?

30

Como faço toppara fechar de maneira semelhante à maneira como lessfecha, ou seja, não deixando para trás sua saída na tela?

Esta é a versão que tenho:

procps-ng version 3.3.9
Arraval
fonte
Que tal usar uma alternativa, como htop?
precisa saber é o seguinte

Respostas:

48

Quando você começa assim ...

top && clear

... a tela é limpa após sair do topo com q.

Isso funciona mais como less:

tput smcup ; top ; tput rmcup

( smcupalterna para uma tela secundária em que o topcomando é executado e, quando você sai, top rmcupalterna para a tela normal)


Você pode usar o comando top para fazer isso ( como criar um alias permanente do Bash? )

Rinzwind
fonte
3
clearparece apagar tudo, exceto a última tela do buffer de rolagem também (portanto, deixando apenas a última tela do topo nesse caso) - pelo menos no xfce4-terminal e no QTerminal. A tputresposta funciona muito bem, especialmente em um alias paratop
Xen2050
2
Não se esqueça de Ctl + L para uma solução rápida.
jpaugh
Oh, interessante; Fiquei me perguntando por que lessa última saída desapareceu completamente do buffer.
Lightness Races com Monica no dia
Algumas outras sugestões: 1. use o htopcomando superior-mas-não-interno e 2. alias os comandos juntos para que você não precise encadeá-los manualmente a cada vez.
flith
@flith Não vou roubar as outras respostas de usuários ;-)
Rinzwind
31

Ironicamente 1 , esse foi brevemente o comportamento de top. No 3.3.8, limpou topa tela, mas não nas versões anteriores ou posteriores. Veja o bug do Red Hat # 977561 :

A limpeza da tela é um resultado indireto de alterações nas manipulações de terminais que foram introduzidas por Jim Warner (autor da ferramenta 'top') para suprimir a inundação da ferramenta 'top' com sinais SIGWINCH gerados por algumas das aplicações de terminal amplamente usadas. Fui eu quem denunciou o problema de inundação e ele tentou fazer o possível para resolvê-lo e lançou uma correção para o problema na forma de oito commits separados. A confirmação que introduz a limpeza de tela tem o seguinte hash: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Devido ao relatório de erros, Jim o corrigiu novamente para não limpar a saída no 3.3.9 .

topnão tem opções ou definições de configuração para controlar isso, AFAICT, esse é um comportamento totalmente codificado. Convém registrar uma solicitação de recurso em https://gitlab.com/procps-ng/procps/issues/ .

Até então, você poderia clearmanualmente sugerir Rinzwind , ou usar tputcomo sugerir uma chave de aço.


Curiosamente, o commit mencionado acima também tem uma boa explicação do comando steeldriver sugerido, porque é de fato o mesmo que foi originalmente feito no código:

Um buffer de rolagem usado em vários emuladores de terminal pode ser um verdadeiro inconveniente para um usuário após algumas operações de redimensionamento. Pressões extras de teclas são necessárias com freqüência para renderizar corretamente a exibição da parte superior.

Após muita investigação, descobrimos duas seqüências terminfo que têm o efeito de desabilitar / restaurar esse maldito buffer de rolagem. Eles estavam bem ocultos sob um título de strings 'para iniciar / terminar programas usando cup'. Por sua vez, 'cup' lida com a capacidade de endereçamento do cursor de um tty.

Não nos importamos com o que você os chama ou com o que eles se referem, desde que eles façam o trabalho. E estes realmente fazem! No entanto, esteja ciente de que existem alguns efeitos colaterais, vários dos quais podem até ser considerados benéficos:

  • enter_ca_mode / smcup / ti desativa o buffer de rolagem (e isso é bom, é o que sempre esperávamos)

  • exit_ca_mode / rmcup / te restaura o buffer de rolagem (mas também restaura o conteúdo da tela existente anteriormente) (que é diferente dos resultados finais anteriores do programa) (onde a última tela renderizada foi deixada intocada)

... que corresponde aos comandos tput smcupe tput rmcup.


1 xkcd obrigatório.

muru
fonte
Curiosamente topo BSD (por exemplo, no MacOS) também não limpar o terminal
Trauma Digital
15

O comportamento que você está procurando a partir de menos é incorporado a uma alternativa chamada htop. Você pode instalá-lo com:

sudo apt-get install htop

Especificamente, ele alterna para o modo de tela alternativo antes de começar a preservar o conteúdo da tela original quando você fecha o htop. Ele também possui uma variedade de outros aprimoramentos sobre o topo dos procps. Depois de instalado, você pode executá-lo como um usuário comum:

htop
penguin359
fonte
O Plus htopé muito colorido, adiciona suporte ao mouse etc.
WinEunuuchs2Unix
4

Você poderia usar watch:

watch top -b

O padrão é atualizar a cada dois segundos; por exemplo, -n1por um segundo, se você quiser alterar esse comportamento. Para sair watch, pressione Ctrl+ em Cvez do habitual Q.

Outra abordagem é abrir uma nova janela do terminal, por exemplo, com xterm:

xterm -e top

Este se comporta exatamente como topnormalmente faz, os fecha a janela quando você sair topcom Qe, claro, ele não deixa de saída no terminal você começou a partir. Adicione &ao final deste comando para iniciá-lo em segundo plano e solte imediatamente o terminal novamente.

sobremesa
fonte
1

Como a resposta de Rinzwind aponta, o clearcomando limpa a topsaída da tela.

Depois de sair, topvocê também pode usar Ctrl+ Lpara limpar a topsaída da tela. Depois de qualquer comando, você ainda pode rolar a tela para ver a topsaída antiga .

Para realmente limpar a tela, de modo que a topsaída não possa ser retornada, use o resetcomando:

top && reset

Outra opção para dar a "aparência nova" de uma nova sessão é executando uma "tela inicial ASCII" (se você tiver uma). No meu caso, eu correria:

top && reset && now && screenfetch

redefinir agora splash.png

  • Meu nowscript chama clima, calendário ( cal) e toiletcom tempo chique.
  • screenfetch pinta o logotipo do Ubuntu e as estatísticas da máquina.
WinEunuuchs2Unix
fonte
1
Eu não recomendaria re-executar .bashrc regularmente sem necessidade, porque geralmente existem linhas como export PATH=...:$PATHnesse arquivo e executá-lo várias vezes estenderá desnecessariamente o arquivo PATH. Além disso, chamando neofetchem .bashrcnão é um comportamento padrão (embora pareça fantasia). Por exemplo, quando eu re-corro, .bashrcnada aparente acontece.
PerlDuck
CTRL + L e nãoclear se comportam da mesma forma: tente em duas janelas novas e diferentes. Em seguida, clique em window1 e digite window2. Agora role novamente nas duas janelas (roda do mouse). Na janela -você pode ver todas as linhas (dependendo do buffer de rolagem) enquanto na janela -você pode rolar uma tela para trás . Ou seja: limpa o buffer de rolagem enquanto é semelhante a $ window_height vezes pressionando (aka nova linha). for i in {1..200}; do echo "line $i"; doneCTRL+LclearCTRL+LclearclearCTRL+LENTER
PerlDuck
1
@PerlDuck neofetché uma boa captura, mas acho que é um derivado chamado screenfetch. Eu o uso para lembrar que estou no Ubuntu porque tenho inicialização dupla e o Windows Bash tem uma tela inicial diferente. Vou tirar .bashrcreferência. Quanto a + cleare meu argumento era que eles são semelhantes, pois ambos deixam a saída no buffer de rolagem para trás. CtrlLtop
WinEunuuchs2Unix
2
Eu acho que todo mundo tem coisas diferentes .bashrc. Tente curl wttr.in/Edmonton?0, é incrível. Use curl wttr.in/:helppara obter ajuda. Eu tenho uma chamada semelhante em um /etc/update-motd.d/scriptlet e sou informado ao fazer login no console ou no ssh (não em todas as janelas do terminal). Se você gosta disso, adicione --silent --max-time 3à ligação em espera para que não demore uma eternidade se a Internet estiver lenta.
PerlDuck #
@PerlDuck O curl wttr.in/Edmonton?0é INCRÍVEL! Muito obrigado. Vou tentar espremer isso depois da toiletexibição do tempo na minha tela inicial :)
WinEunuuchs2Unix