在 Linux 中,我有 shell(例如 bash、csh 等)和终端仿真器(例如 xterm)。 Shell 执行命令,终端仿真器显示带有白色字母的黑色窗口。
它在 Windows 中的表现如何?我知道那里有 cmd.exe,但它是什么?它是一个 shell,还是一个终端仿真器,或者两者兼而有之?
执行bat文件的解释器又是如何调用的呢?它们是由 cmd.exe 还是其他东西执行的?
最佳答案
Linux和Windows的架构不同。确实如此 - 你不应该在没有相似之处的情况下寻找相似之处。
Linux 基于 UNIX,可以追溯到哑终端时代。图形设备高度特化(且昂贵)且不常见。大多数 UNIX 访问是通过字符驱动的终端(当时是异步的)。
终端设备制造商众多。当时最成功的公司之一是 DEC(自从被 HP 接管后),他们在 VAX 计算机上使用了一系列终端:vt52 是最基本的,vt100、vt220、vt320 提供了越来越多的功能。 putty 等终端仿真器可模拟这些。 IBM、HP 和其他公司也都有自己的设备。
问题是所有这些终端都是不同的,必须以不同的方式驱动。因此创建了一个终端指令数据库,首先称为 termcap
,然后是 terminfo
。根据仍在使用的 TERM
环境变量的设置访问数据库。
出现图形,特别是 Xterm,和一个终端窗口。数据库有 xterm 的控制信息,TERM
变量被相应地设置。
当然,就 UNIX 而言,Microsoft 的 Windows 是一个完全陌生的操作系统,因此它必须假装是一个 UNIX 终端。这就是像 putty 这样的终端仿真器。它将伪装成如今只能在博物馆中找到的那些古老终端之一。
因此,cmd.exe 不是终端仿真器,因为它是在 Windows 机器上运行的 Windows 应用程序。无需模仿任何东西。
它是一个 shell ,取决于你对 shell 是什么的定义。 Microsoft 将 Windows Explorer 视为一个 shell 。换句话说,shell 只是一个运行其他程序的程序。大多数 UNIX/Linux 用户不会将 GUI 称为 shell,但这只是语义。
cmd.exe 是一个控制台程序,并且有很多这样的程序。例如 telnet
和 python
都是控制台程序。这意味着它们有一个控制台窗口,就是您看到的单色矩形。有些人认为它与 cmd.exe 相同(更糟糕的是称它为“DOS 框”),但事实并非如此,它只是使用相同的控制台 API。 Windows 图形程序有一个与之关联的“主窗口”,但如果它愿意,它也可以创建一个控制台!他们通常不会,但他们可以。
cmd.exe 脚本默认具有 .bat
(或现在不太常见的 .cmd
)文件扩展名。但这个文件扩展名关联只是一组在 Windows 注册表 (HKEY_CLASSES_ROOT) 中的查找。这里没有魔法,就像将 .doc
与 Microsoft Office Word 相关联,而不是将 .bat
与 cmd.exe 相关联。
UNIX 的巧妙功能之一是脚本中的 #!
行。这可用于运行 bash、ksh、sed、awk、perl、python、ruby 等等。如果您安装了多个版本,比如安装了 python,那么您只需更改 #!
行来选择正确的代码。在 Windows 上没有这样的灵 active ,您一次只能将一个程序与文件扩展名相关联。
关于windows - cmd.exe 是 shell、终端仿真器还是两者兼而有之?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31085853/