Comment quitter top sans laisser la sortie sur le terminal?

30

Comment puis-je topquitter de façon similaire à la façon dont il se lessferme, c'est-à-dire sans laisser sa sortie à l'écran?

Voici la version que j'ai:

procps-ng version 3.3.9
Arraval
la source
Que diriez-vous d'utiliser une alternative, comme htop?
DarkHeart

Réponses:

48

Lorsque vous démarrez comme ça ...

top && clear

... l'écran s'efface après avoir quitté le haut avec q.

Cela agit plus comme less:

tput smcup ; top ; tput rmcup

( smcupbascule vers un écran secondaire où la topcommande est exécutée et lorsque vous quittez top rmcup, revient à l'écran normal)


Vous pouvez alias la commande supérieure pour le faire ( comment créer un alias Bash permanent? )

Rinzwind
la source
3
clearsemble effacer tout sauf le dernier écran du tampon de défilement (il suffit donc de laisser le dernier écran du haut dans ce cas) - au moins dans xfce4-terminal et QTerminal. La tputréponse fonctionne très bien, en particulier dans un alias pourtop
Xen2050
2
N'oubliez pas Ctl + L pour une solution rapide.
jpaugh
Oh intéressant; Je me demandais pourquoi lessla dernière sortie avait complètement disparu du tampon.
Courses de légèreté avec Monica
Quelques autres suggestions: 1. utilisez les commandes bien supérieures mais non intégrées htop, et 2. aliasez les commandes ensemble afin de ne pas avoir à les chaîner manuellement à chaque fois.
2018 à 18h49
@flith Je ne vais pas voler les réponses des autres utilisateurs ;-)
Rinzwind
31

Ironiquement 1 , ce fut brièvement le comportement de top. Dans 3.3.8, topn'a effacé l'écran, mais pas dans les versions passées ou depuis. Voir le bogue Red Hat # 977561 :

L'effacement de l'écran est un résultat indirect des changements dans les manipulations de terminaux qui ont été introduits par Jim Warner (auteur de l'outil `` top '') afin de supprimer l'inondation de l'outil `` top '' avec des signaux SIGWINCH générés par certaines des applications de terminal largement utilisées. C'est moi qui ai signalé le problème des inondations et il a essayé de faire de son mieux pour le résoudre et a publié un correctif pour le problème sous la forme de 8 commits distincts. Le commit introduisant l'effacement d'écran a le hachage suivant: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

En raison du rapport de bogue, Jim l'a ensuite corrigé pour ne plus effacer la sortie dans 3.3.9 .

topn'a pas d'options ou de paramètres de configuration pour contrôler cela, AFAICT, c'est un comportement entièrement codé en dur. Vous souhaiterez peut-être déposer une demande de fonctionnalité sur https://gitlab.com/procps-ng/procps/issues/ .

Jusque-là, vous pouvez clearmanuellement comme le suggère Rinzwind , ou utiliser tputcomme le suggère le conducteur d'acier.


Fait intéressant, le commit mentionné ci-dessus a également une belle explication de la commande steeldriver suggérée, car elle est en fait la même que ce qui a été initialement fait dans le code:

Un tampon de défilement utilisé dans plusieurs émulateurs de terminaux pourrait être un réel inconvénient pour un utilisateur après certaines opérations de redimensionnement. Des frappes supplémentaires seraient fréquemment nécessaires pour rendre correctement l'affichage du haut.

Après beaucoup de recherches, nous avons déniché deux chaînes terminfo qui ont pour effet de désactiver / restaurer ce tampon de défilement. Ils étaient bien cachés sous un titre de chaînes «pour démarrer / terminer des programmes en utilisant cup». À son tour, «cup» traite de la capacité d'adressage du curseur d'un tty.

Peu importe comment vous les appelez ou à quoi ils se réfèrent tant qu'ils font le travail. Et c'est vraiment le cas! Sachez toutefois qu'il existe certains effets secondaires, dont plusieurs peuvent même être considérés comme bénéfiques:

  • enter_ca_mode / smcup / ti désactive la mise en mémoire tampon de défilement (et c'est bien, c'est ce que nous avions toujours espéré)

  • exit_ca_mode / rmcup / te restaure le tampon de défilement (mais restaure également le contenu de l'écran existant avant le sommet) (ce qui est différent des anciens résultats de fin de programme) (où ce dernier écran rendu n'a pas été modifié)

... qui correspond aux commandes tput smcupet tput rmcup.


1 xkcd obligatoire.

muru
la source
Fait intéressant, le sommet BSD (par exemple sur MacOS) efface également le terminal
Digital Trauma
15

Le comportement que vous recherchez à partir de moins est intégré à une alternative appelée htop. Vous pouvez l'installer avec:

sudo apt-get install htop

Plus précisément, il passe au mode d'écran alternatif avant de commencer à conserver le contenu de votre écran d'origine lorsque vous fermez le htop. Il a également une variété d'autres améliorations par rapport au haut de procps. Une fois qu'il est installé, vous pouvez simplement l'exécuter en tant qu'utilisateur normal:

htop
pingouin359
la source
Plus htopest très coloré, ajoute le support de la souris, etc.
WinEunuuchs2Unix
4

Vous pouvez utiliser watch:

watch top -b

Il est mis à jour par défaut toutes les deux secondes, utilisez par exemple -n1pendant une seconde si vous souhaitez modifier ce comportement. Pour quitter watch, appuyez sur Ctrl+ Cau lieu de l'habituel Q.

Une autre approche consiste à ouvrir une nouvelle fenêtre de terminal, par exemple avec xterm:

xterm -e top

Cela se comporte exactement comme d' tophabitude, la fenêtre se ferme lorsque vous quittez topavec Qet bien sûr, elle ne laisse aucune sortie dans le terminal à partir duquel vous l'avez démarré. Ajoutez &à la fin de cette commande pour la démarrer en arrière-plan et relâchez immédiatement le terminal.

dessert
la source
1

Comme le souligne la réponse de Rinzwind, la clearcommande efface la topsortie de l'écran.

Après avoir quitté, topvous pouvez également utiliser Ctrl+ Lpour effacer la topsortie de l'écran. Cependant, après l'une ou l'autre des commandes, vous pouvez toujours faire défiler l'écran pour voir l'ancienne topsortie.

Pour vraiment effacer l'écran, de sorte que la topsortie ne puisse pas être défilée vers l'arrière, utilisez la resetcommande:

top && reset

Une autre option pour donner un "nouveau look" à une toute nouvelle session est d'exécuter un "écran de démarrage ASCII" (si vous en avez un). Dans mon cas, je courrais:

top && reset && now && screenfetch

réinitialiser maintenant splash.png

  • Mon nowscript appelle la météo, le calendrier ( cal) et l' toiletheure.
  • screenfetch peint le logo Ubuntu et les statistiques de la machine.
WinEunuuchs2Unix
la source
1
Je ne recommanderais pas de réexécuter .bashrc régulièrement sans besoin car généralement il y a des lignes comme export PATH=...:$PATHdans ce fichier et l'exécuter plusieurs fois étendra inutilement le fichier PATH. En outre, appeler neofetchen .bashrcest pas un comportement standard (bien qu'il semble fantaisie). Par exemple, lorsque je relance mon .bashrcrien d'apparent ne se produit.
PerlDuck
CTRL + L et clearse comportent pas le même: essayer for i in {1..200}; do echo "line $i"; donedans deux fenêtres, frais. Ensuite, CTRL+Ltapez dans window1 et tapez clearwindow2. Faites maintenant défiler en arrière dans les deux fenêtres (molette de la souris). Dans la CTRL+Lfenêtre, vous pouvez voir toutes les lignes (en fonction de votre mémoire tampon de défilement) tandis que dans la clearfenêtre, vous ne pouvez faire défiler qu'un écran en arrière . C'est-à-dire: clearefface le tampon de défilement tandis que CTRL+Lest similaire à $ window_height fois en appuyant sur ENTER(aka newline).
PerlDuck
1
@PerlDuck neofetchest une bonne prise mais c'est un dérivé que je suppose appelé screenfetch. Je l'utilise pour me rappeler que je suis sous Ubuntu car j'ai un double démarrage et Windows Bash a un écran de démarrage différent. Je vais retirer la .bashrcréférence. Quant à clearet Ctrl+ Lmon point était qu'ils sont similaires en ce qu'ils laissent tous les deux la topsortie dans le tampon de défilement arrière.
WinEunuuchs2Unix
2
Je pense que tout le monde a des choses différentes dans leur .bashrc. Essayez curl wttr.in/Edmonton?0, c'est génial. Utilisez curl wttr.in/:helppour obtenir de l'aide. J'ai un appel similaire dans un /etc/update-motd.d/scriptlet donc je m'informe lorsque je me connecte depuis la console ou ssh (pas pour chaque fenêtre de terminal). Si vous aimez ça, ajoutez --silent --max-time 3à l'appel curl pour que cela ne prenne pas une éternité si Internet est lent.
PerlDuck
@PerlDuck The curl wttr.in/Edmonton?0is AWESOME! Merci beaucoup. Je vais essayer de le faire après l' toiletaffichage de l' heure sur mon écran de démarrage :)
WinEunuuchs2Unix