从命令行清除屏幕的一半


11

有什么方法可以清除终端,但不是将提示留在屏幕顶部,而是将其留在中间?看起来clear基本上会忽略所有命令行参数。

我认为会有某种方法可以做到这一点,tput但找不到。

Answers:


12

您可以使用tput将光标移动到屏幕中的给定行,例如,

tput cup 11 0

将其移至第十二行(值从零开始计数)。

同样,您可以使用tputed功能从该位置清除到屏幕末端。结合起来

tput cup 11 0 && tput ed

可能是想要的。

如果要转到屏幕上的中途标记,则返回的第一个数字

stty size

是(在大多数系统上)屏幕的行数。将其添加到命令中:

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

clear程序不同于tput ed

  • 它将光标移动到原始位置(左上方),然后
  • 从该点清除到屏幕末端。

警告:tput ed由于很久以前解决的问题,在某些平台上可能无法正常工作。在这种情况下,升级您的curses / ncurses配置将解决此问题。


在Unix上,这不会为我清除文本,但会移动光标
James Owers

1
听起来像十年前已修复的错误。也许是时候升级东西了。
Thomas Dickey


-1

如果您有兴趣在清理其余部分的同时清除屏幕的下半部分,则可以这样做:

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

编辑:澄清一下,如果您运行seq $(stty size | cut -d' ' -f1)其他答案,将保留输出的前半部分,而此命令将保留后半部分(即最新的输出)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.