我在默认的 bash_logout 中注意到了这一点:
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
我很好奇为什么它不直接使用clear
.谷歌搜索并没有启发我,但它确实向我展示tput clear
了tput reset
。
清除屏幕的各种选项之间有什么区别?
答案1
在我的 debian 系统上,/usr/bin/clear
和/usr/bin/tput
是软件包的一部分ncurses-bin
,/usr/bin/clear_console
是软件包的一部分bash
。
为什么默认情况下应该.bash_logout
假设该ncurses-bin
软件包已安装?
另外,如果从 Linux 虚拟终端(而不是从串行或伪 tty)运行,clear_console(1)
也会清除回滚缓冲区(除了发送clear
/ cl
terminfo 转义之外)。
它将通过来回切换到另一个 vt [1] 并发送\e[3J
“刷新回滚”逃脱。
在较新的系统上,clear
也会tput clear
发送该\e[3J
转义(但在许多仍在使用的发行版上不会,例如 Centos 7 或 Debian 9 - 在后者上,TERM
环境变量应设置为linux3.0
,这不是默认值)。
查看来源clear_console
这里。
[1] 可能会被击败vgacon.scrollback_persistent=1
启动参数,如果您的内核是使用VGACON_SOFT_SCROLLBACK
选项(“在系统 RAM 中启用回滚缓冲区”)编译的。