在 Mac 上进行重置就像在 Linux 上进行重置一样

在 Mac 上进行重置就像在 Linux 上进行重置一样

在 Mac 上,reset终端中的命令几乎与clear.在 Ubuntu Linux 以及其他版本的 Linux 上,该reset命令实际上会“重置”终端,这样您就无法向上滚动或通过滚动查看以前输入的命令。有没有办法让resetMac 上的命令与 Linux 上的命令执行相同的操作reset?如果是这样,我该怎么办?

答案1

实际上(在 MacOS 上),它不是“完全相同的东西”(手册页描述“清除”不同于“重置”)。

MacOS 附带 ncurses 5.7 (9年),并对终端数据库进行了一些更新。如果您想要更新的东西,安装 MacPorts 可以让您将 ncurses 更新到当前(不到几个月)版本。

顺便说一句,这比 Ubuntu 更新,Ubuntu 通常比开发版本滞后 6 个月到 2 年或更长时间。

答案2

这有点像历史文物。在 Unix 诞生之初time_t,计算机是数据中心中的大盒子,终端是用于与计算机进行通信的独立硬件。终端不一定与计算机来自同一制造商,每个终端制造商和型号都有自己的一组必须考虑的额外功能和怪癖。

curses及其后来的后继者ncurses是隐藏终端的所有与品牌和型号相关的细节的库,并提供执行终端控制操作的标准方法,例如“清除屏幕”或“将终端重置为正常的默认设置”。这些库使用环境变量TERM来决定应使用哪一组控制序列。

命令喜欢clearreset使用此类库将用户请求的操作转换为特定于终端型号的控制序列并将其发送到终端。这些特定于模型的控制序列存储在termcapterminfo文件中 -termcap是旧样式,并且terminfoncurses.

如今,“终端”实际上是一个终端仿真器,在与实际计算机相同的物理硬件上运行,这一点很常见。但它仍然受到控制,就好像它是一个单独的硬件一样。

这使得终端仿真器的程序员有一定程度的自由来选择如何实现特定功能。例如,程序员可能会这样做,以便重置终端将清除回滚缓冲区 - 或者他/她可能会选择其他方式,如果他/她认为回滚缓冲区“属于”用户并且任何应用程序都不应这样做有能力清除它。

或者,终端仿真器的程序员可能已经提供了不同的控制序列,用于在清除或不清除回滚缓冲区的情况下重置终端。在这种情况下,为操作系统发行版打包终端控制库的人将面临一个选择:该reset命令是否应该默认清除回滚?根据选择,她/他可以将不同的控制序列存储在终端控制库使用的数据文件中的适当位置。

系统管理员始终可以向termcapterminfo文件添加新的终端控制序列集,或者修改现有的终端控制序列集。也许某些站点的终端模型并不广为人知,或者标准定义可能只需要进行一些调整即可匹配特定的用例。如果事实证明该reset命令使用的默认控制序列实际上是“重置终端而不清除回滚”,则可以将其替换为文件中的“重置终端和回滚”代码。

相关内容