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

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

我怎样才能top以类似于退出的方式退出less,即不在屏幕上留下其输出?

这是我拥有的版本:

procps-ng version 3.3.9

答案1

当你像这样开始的时候...

top && clear

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

这更像是less

tput smcup ; top ; tput rmcup

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


您可以使用 top 命令的别名来执行此操作(如何创建永久的 Bash 别名?

答案2

讽刺的是1,这是简要地的行为top。在 3.3.8 中,top确实会清除屏幕,但在之前或之后的版本中不会。请参阅Red Hat 错误 #977561

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

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

top没有选项或配置设置来控制这一点,据我所知,这完全是硬编码行为。你可能想在https://gitlab.com/procps-ng/procps/issues/

在此之前,你可以clear手动喜欢Rinzwind 建议,或者tput按照steeldriver建议的方式使用。


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

多个终端仿真器中使用的回滚缓冲区在执行某些调整大小操作后可能会给用户带来很大的不便。为了正确呈现 top 的显示,经常需要额外的按键。

经过大量侦查,我们发现了两个 terminfo 字符串,它们的作用是禁用/恢复该死的回滚缓冲区。它们隐藏在“使用 cup 启动/结束程序”字符串标题下。反过来,“cup”处理 tty 的光标寻址功能。

我们不在乎你如何称呼它们或它们指什么,只要它们能完成工作就行。它们确实能完成工作!但请注意,它们有一些副作用,其中一些甚至可以被认为是有益的:

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

  • exit_ca_mode/rmcup/te 恢复回滚缓冲区(但也恢复现有前顶部的屏幕内容)(这与以前的程序最终结果不同)(最后渲染的屏幕保持不变)

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


1 强制性的 xkcd。

答案3

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

sudo apt-get install htop

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

htop

答案4

正如 Rinzwind 的回答指出的那样,该clear命令会清除top屏幕输出。

退出后,top您还可以使用Ctrl+L清除top屏幕上的输出。不过,执行任一命令后,您仍然可以向上滚动屏幕以查看旧top输出。

要真正清除屏幕,使得top输出无法滚动回去,请使用以下reset命令:

top && reset

另一个让全新会话“焕然一新”的方法是运行“ASCII 启动画面”(如果有的话)。就我而言,我会运行:

top && reset && now && screenfetch

立即重置 splash.png

  • 我的now脚本调用天气、日历(cal)并toilet带有奇特的时间。
  • screenfetch绘制 Ubuntu 徽标和机器统计数据。

相关内容