如何退出 top 而不将输出留在终端上?

Arr*_*val 30 command-line top

我如何top以类似于less退出的方式退出,即不将其输出留在屏幕上?

这是我拥有的版本:

procps-ng version 3.3.9
Run Code Online (Sandbox Code Playgroud)

Rin*_*ind 49

当你这样开始时......

top && clear
Run Code Online (Sandbox Code Playgroud)

... 用 q 退出 top 后屏幕会清除。

这更像是less

tput smcup ; top ; tput rmcup
Run Code Online (Sandbox Code Playgroud)

smcup切换到top执行命令的辅助屏幕,退出时top rmcup切换回正常屏幕)


您可以为 top 命令设置别名(如何创建永久的 Bash 别名?

  • `clear` 似乎也擦除了回滚缓冲区的最后一个屏幕之外的所有屏幕(所以在这种情况下只留下 top 的最后一个屏幕)-至少在 xfce4-terminal 和 QTerminal 中。`tput` 答案很有效,尤其是在 `top` 的别名中 (3认同)
  • 不要忘记 Ctl+L 进行快速修复。 (2认同)

mur*_*uru 31

具有讽刺意味的是1,这是短暂的的行为top。在 3.3.8 中,top确实清除了屏幕,但在过去或以后的版本中都没有。请参阅红帽错误 #977561

屏幕清除是由 Jim Warner('top' 工具的作者)引入的终端操作更改的间接结果,目的是抑制由一些广泛使用的终端应用程序生成的 SIGWINCH 信号淹没“top”工具。是我报告了泛滥问题,他尽力解决这个问题,并以 8 次单独提交的形式发布了该问题的修复程序。引入屏幕清除的提交具有以下哈希值:'dedaf6e1a81738ff08ee8e8523871e12f555ad6d'。

由于错误报告,Jim 然后修复它以再次不清除 3.3.9 中的输出

top没有选项或配置设置来控制这个,AFAICT,这完全是硬编码的行为。您可能希望在以下位置提交功能请求https://gitlab.com/procps-ng/procps/issues/

在此之前,您可以clear手动像Rinzwind 建议的那样,或使用tput像 steeldriver 建议的那样。


有趣的是,上面提到的提交也对建议的命令 steeldriver 有很好的解释,因为它实际上与代码中最初所做的相同:

在一些终端仿真器中使用的回滚缓冲区可能会给用户带来一些调整大小操作的真正不便。为了正确呈现顶部的显示,经常需要额外的击键。

经过大量调查,我们发现了两个 terminfo 字符串,它们具有禁用/恢复那个该死的回滚缓冲区的效果。它们被很好地隐藏在“使用cup 开始/结束程序”的字符串标题下。反过来,'cup' 处理 tty 的游标寻址能力。

只要他们完成工作,我们不在乎你怎么称呼他们或他们指的是什么。而这些真的可以!但是,请注意,有一些副作用,其中一些甚至可以被认为是有益的:

  • enter_ca_mode/smcup/ti 禁用回滚缓冲(这很好,这是我们一直希望的)

  • exit_ca_mode/rmcup/te 恢复回滚缓冲区(但也恢复存在pre-top 的屏幕内容)(这与之前的程序最终结果不同)(最后渲染的屏幕保持不变)

... 对应于tput smcuptput rmcup命令。


1 强制性 xkcd。


pen*_*359 15

您正在从less 中寻找的行为内置于称为htop 的替代方案中。您可以使用以下命令安装它:

sudo apt-get install htop
Run Code Online (Sandbox Code Playgroud)

具体来说,当您关闭 htop 时,它会在开始保留原始屏幕内容之前切换到备用屏幕模式。与 procps 的顶部相比,它还具有多种其他增强功能。安装后,您可以以普通用户身份运行它:

htop
Run Code Online (Sandbox Code Playgroud)