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

29

Como obtenho o top para sair da mesma forma que o less , ou seja, não deixando para trás a saída na tela?

Esta é a versão que tenho:

procps-ng version 3.3.9
    
por Arraval 07.03.2018 / 14:59

5 respostas

47

Quando você começa assim ...

top && clear

... a tela desaparece após sair do topo com q.

Isso age mais como less :

tput smcup ; top ; tput rmcup

( smcup muda para uma tela secundária onde o comando top é executado e quando você sai do top rmcup volta para a tela normal)

Você poderia aliasar o comando top para fazer isso ( Como faço para criar um alias permanente do Bash? )

    
por Rinzwind 07.03.2018 / 15:15
31

Ironicamente 1 , este foi breve o comportamento de top . Em 3.3.8, top limpou a tela, mas não nas versões anteriores ou posteriores. Veja Red Hat bug # 977561 :

  

A limpeza de tela é um resultado indireto de alterações no terminal   manipulações que foram introduzidas por Jim Warner (autor do 'top'   ferramenta) para suprimir a inundação da ferramenta 'top' com a SIGWINCH   sinais gerados por algumas das aplicações de terminal amplamente utilizadas. isto   fui eu quem relatou a questão das inundações e ele tentou fazer o seu melhor em   para resolvê-lo e liberou uma correção para o problema em forma de 8   commits separados. O commit introduzindo a limpeza de tela tem o   seguinte hash: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

Devido ao relatório de erros, Jim então corrigiu novamente para não limpar a saída em 3.3. 9 .

top não tem opções ou definições de configuração para controlar isso, AFAICT, isso é um comportamento totalmente codificado. Talvez você queira enviar uma solicitação de recurso no link .

Até então, você poderia clear manualmente gostar Rinzwind sugeriu , ou use tput como sugere a steeldriver.

Curiosamente, o commit mencionado acima também tem uma boa explicação do comando steeldriver sugerido, porque é na verdade o mesmo que foi feito originalmente 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. Extra   keystroke (s) seria freqüentemente necessário para renderizar corretamente   exibição do topo.

     

Depois de muita investigação descobrimos duas seqüências terminográficas que têm o   efeito de desativar / restaurar esse buffer de rolagem danado. Eles eram   bem escondido sob um título de strings 'para iniciar / terminar programas usando   copo'. Por sua vez, 'cup' lida com a capacidade de endereçamento do cursor do tty.

     

Nós não ligamos para o que você os chama ou ao que eles se referem, desde que eles   faça o trabalho. E estes realmente fazem! Esteja ciente, no entanto, de que   alguns efeitos colaterais, vários dos quais podem até ser considerados como   benéfico:

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

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

  •   

... que corresponde aos comandos tput smcup e tput rmcup .

1 Xkcd obrigatório

    
por muru 07.03.2018 / 15:22
15

O comportamento que você está procurando de menos está embutido em uma alternativa chamada htop. Você pode instalá-lo com:

sudo apt-get install htop

Especificamente, ele alterna para o modo de tela alternativa antes de começar a preservar o conteúdo original da tela quando você fechar o htop. Ele também tem uma variedade de outras melhorias sobre o topo do processo. Depois de instalado, você pode executá-lo como um usuário comum:

htop
    
por penguin359 07.03.2018 / 23:30
4

Você pode usar watch :

watch top -b

O padrão é atualizar a cada dois segundos. Por exemplo, use -n1 por um segundo se você quiser alterar esse comportamento. Para sair de watch , pressione Ctrl + C em vez do usual Q .

Outra abordagem é a abertura de uma nova janela de terminal, por ex. com xterm :

xterm -e top

Isto se comporta exatamente como top normalmente, a janela fecha quando você sai do top com Q e é claro que não deixa saída no terminal de onde você começou. Adicione & ao final desse comando para iniciá-lo em segundo plano e liberar imediatamente o terminal novamente.

    
por dessert 07.03.2018 / 18:57
1

Como a resposta de Rinzwind aponta, o comando clear limpa a saída top da tela.

Após sair de top , você também pode usar Ctrl + L para limpar a saída top da tela. Entretanto, após um dos dois comandos, você ainda pode rolar a tela para cima para ver a saída top antiga.

Para realmente limpar a tela, de modo que a saída top não possa ser rolada de volta para, use o comando reset :

top && reset

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

top && reset && now && screenfetch

  • Meu script now chama tempo, calendário ( cal ) e toilet com tempo extravagante.
  • screenfetch pinta o logotipo do Ubuntu e as estatísticas da máquina.
por WinEunuuchs2Unix 10.03.2018 / 03:57