web-dev-qa-db-fra.com

Comment quitter top sans laisser la sortie sur le terminal?

Comment puis-je obtenir top quitter de la même manière que less, c’est-à-dire ne pas laisser sa sortie à l’écran?

Ceci est la version que j'ai:

procps-ng version 3.3.9
30
Arraval

Quand vous commencez comme ça ...

top && clear

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

Cela ressemble plus à less:

tput smcup ; top ; tput rmcup

(smcup bascule vers un écran secondaire où la commande top est exécutée et lorsque vous quittez toprmcup, revient à l'écran normal)


Vous pouvez aliaser la commande top pour faire cela ( Comment créer un alias Bash permanent? )

47
Rinzwind

Ironiquement1, c’était brièvement le comportement de top. Dans la version 3.3.8, top a effacé l'écran, mais pas dans les versions antérieures ou ultérieures. Voir bogue Red Hat n ° 977561 :

L’effacement de l’écran est un résultat indirect des modifications apportées aux manipulations du terminal, introduites par Jim Warner (auteur de l’outil "top"), afin de supprimer l’inondation de l’outil "top" avec les signaux SIGWINCH générés par certaines des applications de terminal les plus 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 forme de 8 commits distincts. Le commit introduisant l'effacement de l'écran a le hachage suivant: 'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'.

En raison du rapport de bogue, Jim l'a alors corrigé à nouveau pas d'effacement de la sortie dans 3.3.9 .

top n'a pas d'options ou de paramètres de configuration pour contrôler cela, AFAICT, il s'agit d'un comportement entièrement codé en dur. Vous voudrez peut-être déposer une demande de fonctionnalité à l'adresse https://gitlab.com/procps-ng/procps/issues/ .

Jusque-là, vous pourriez utiliser clear manuellement, comme Rinzwind suggéré , ou utiliser tput, comme le suggère steeldriver.


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

Un tampon de défilement utilisé dans plusieurs émulateurs de terminaux peut constituer un réel inconvénient pour un utilisateur après certaines opérations de redimensionnement. Une frappe supplémentaire est souvent nécessaire pour rendre correctement l'affichage du haut.

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

Nous ne nous soucions pas de comment vous les appelez ou de ce à quoi ils se réfèrent tant qu'ils font le travail. Et ceux-ci le font vraiment! Soyez avisé, cependant, 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 tampon du défilement (et c'est bien, c'est ce que nous avions toujours espéré)

  • exit_ca_mode/rmcup/te restaure la mémoire tampon de défilement (mais restaure également le contenu de l'écran existant auparavant) (ce qui diffère des résultats de fin de programme précédents) (où le dernier écran restait vierge)

... qui correspond aux commandes tput smcup et tput rmcup.


1 xkcd obligatoire.

31
muru

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

Sudo apt-get install htop

Plus précisément, il passe en mode d’écran alternatif avant de commencer à conserver le contenu de votre écran d’origine lorsque vous fermez htop. Il propose également diverses autres améliorations par rapport au sommet de procps. Une fois installé, vous pouvez simplement l'exécuter en tant qu'utilisateur régulier:

htop
15
penguin359

Vous pouvez utiliser watchname__:

watch top -b

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

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

xterm -e top

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

4
dessert

Comme le souligne la réponse de Rinzwind, la commande clearefface topde la sortie de l'écran.

Après avoir quitté topname__, vous pouvez également utiliser Ctrl+L pour effacer la sortie topde l'écran. Après l'une ou l'autre commande, vous pouvez toujours faire défiler l'écran pour voir l'ancienne sortie topname__.

Pour vraiment effacer l'écran, de sorte que la sortie topne puisse pas être rétablie, utilisez la commande resetname__:

top && reset

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

top && reset && now && screenfetch

reset now splash.png

  • Mon script nowappelle la météo, le calendrier (calname__) et toiletavec une heure avancée.
  • screenfetchpeint le logo Ubuntu et les statistiques de la machine.
1
WinEunuuchs2Unix