在 Mac 上,reset
终端中的命令几乎与clear
. 在 Ubuntu Linux 以及其他版本的 Linux 上,该reset
命令实际上会“重置”终端,这样您就无法向上滚动或通过滚动查看先前输入的命令。有没有办法让reset
Mac 上的命令像 Linux 上的一样行动/做同样的事情reset
?如果是这样,我该怎么做?
在 Mac 上,reset
终端中的命令几乎与clear
. 在 Ubuntu Linux 以及其他版本的 Linux 上,该reset
命令实际上会“重置”终端,这样您就无法向上滚动或通过滚动查看先前输入的命令。有没有办法让reset
Mac 上的命令像 Linux 上的一样行动/做同样的事情reset
?如果是这样,我该怎么做?
实际上(在 MacOS 上),它不是“完全相同的东西”(“clear”的手册页描述与“reset”不同)。
MacOS 附带 ncurses 5.7(9岁),对终端数据库进行了一些更新。如果您想要更新的东西,安装 MacPorts 可以让您将 ncurses 更新到当前(少于几个月)版本。
顺便说一句,这将比 Ubuntu 更新,后者通常比开发版本滞后 6 个月到 2 年或更长时间。
这有点像历史文物。在 Unix 诞生之初
time_t
,计算机是数据中心的大盒子,终端是用于与它们通信的独立硬件。终端不一定来自与计算机相同的制造商,每个终端制造商和型号都有自己的一组额外功能和怪癖,必须加以考虑。curses
, 及其后来的继任者ncurses
是隐藏所有终端的制造和模型相关细节的库,并提供标准方法来执行终端控制操作,如“清除屏幕”或“将终端重置为正常的默认设置”。这些库使用环境变量TERM
来决定应该使用哪一组控制序列。命令喜欢
clear
并reset
使用此类库将用户请求的操作转换为特定于终端模型的控制序列并将它们发送到终端。这些特定于模型的控制序列存储在termcap
文件中terminfo
-termcap
是旧样式,terminfo
是ncurses
.今天,“终端”实际上是一个终端仿真器,它运行在与实际计算机相同的物理硬件上,这一点非常普遍。但它仍然受到控制,就好像它是一个单独的硬件一样。
这让终端仿真器的程序员有一定的自由度来选择应该如何实现特定的功能。例如,程序员可能会这样做,以便重置终端将清除回滚缓冲区 - 或者她/他可能会选择其他方式,如果她/他认为回滚缓冲区“属于”用户并且没有应用程序应该有权清除它。
或者,终端仿真器的程序员可能已经提供了不同的控制序列来重置终端,无论是否清除回滚缓冲区。在这种情况下,为 OS 分发打包终端控制库的人将有一个选择:该
reset
命令是否应该默认清除回滚?根据选择,她/他可以在终端控制库使用的数据文件中的适当位置存储不同的控制序列。系统管理员始终可以将新的终端控制序列集添加到
termcap
或terminfo
文件,或修改现有的。也许某些站点的终端模型并不广为人知,或者标准定义可能只需要稍作调整即可匹配特定用例。如果事实证明该reset
命令使用的默认控制序列实际上是“重置终端而不清除回滚”,您可以将其替换为文件中的“重置终端和回滚”代码。