cmd.exe是shell,终端模拟器还是两者兼而有之?

时间:2015-06-27 06:21:49

标签: windows shell batch-file cmd

在Linux中我有shell(例如bash,csh等)和终端模拟器(例如xterm)。 Shell执行命令和终端模拟器显示带有白色字母的黑色窗口。

它在Windows中如何?我知道我有cmd.exe,但它是什么?它是一个shell,还是终端模拟器,还是它们都是?

如何称为执行bat文件的解释器?它们是由cmd.exe还是其他东西执行的?

5 个答案:

答案 0 :(得分:12)

Linux和Windows的架构不同。这真的是 - 当没有相似之处时,你不应该寻找相似之处。

Linux基于UNIX,可以追溯到哑终端的时代。图形设备是高度专业化(和昂贵的),并不常见。大多数UNIX访问是通过字符驱动的终端(异步)。

有许多终端设备制造商。当时最成功的一个是DEC(自HP接管以来),他们的VAX计算机上使用了一系列终端:vt52是最基本的,vt100,vt220,vt320提供了越来越多的功能。像 putty 这样的终端模拟器会模仿这些模拟器。 IBM,惠普和其他公司也有自己的设备。

问题在于所有这些终端都不同,并且必须采用不同的方式。因此创建了一个终端指令数据库,首先称为termcap,然后是terminfo。访问数据库取决于仍然使用的TERM环境变量的设置。

来图形,特别是Xterm和终端窗口。数据库具有xterm的控制信息,并相应地设置TERM变量。

当然,就UNIX而言,微软的Windows是一个完全陌生的操作系统,所以它必须假装成为UNIX终端。这就像 putty 这样的终端模拟器。它将伪装成现在只在博物馆中发现的那些古老的终端之一。

因此, cmd.exe 不是终端模拟器,因为它是在Windows计算机上运行的Windows应用程序。没有必要模仿任何东西。

它是一个shell,具体取决于你对shell的定义。 Microsoft认为Windows资源管理器是一个shell。换句话说,shell只是一个运行其他程序的程序。大多数UNIX / Linux用户不会将GUI称为shell,但这只是语义。

cmd.exe 控制台程序,其中有很多。例如,telnetpython都是控制台程序。这意味着他们有一个控制台窗口,这是您看到的单色矩形。有些人认为这与 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上没有这种灵活性,您一次只能将一个程序与文件扩展名相关联。

答案 1 :(得分:5)

CMD.exe是一个Win32控制台程序,从窗口角度来看没有什么特别之处。在任务管理器中查看开始 - 运行(Winkey + R)(Ctrl + Shift + Escape)。

cmd.exe

关闭

ftp.exe ftp.microsoft.com

所有控制台程序都有一个控制台,并且与GUI程序的工作方式不同(什么是GUI程序 - 没有控制台的程序)。通常,但并非总是如此,我们启动cmd然后请求cmd启动另一个控制台程序。但是从上面的ftp程序示例中可以看到CMD不是必需的。

来自帮助

  

字符模式应用

     

控制台管理字符模式应用程序(不提供自己的图形用户界面的应用程序)的输入和输出(I / O)。

     

控制台功能可以对控制台进行不同级别的访问。高级控制台I / O功能使应用程序能够从标准输入读取,以检索存储在控制台输入缓冲区中的键盘输入。这些函数还使应用程序能够写入标准输出或标准错误,以在控制台的屏幕缓冲区中显示文本。高级功能还支持标准句柄的重定向和控制台模式的控制,以实现不同的I / O功能。低级控制台I / O功能使应用程序能够接收有关键盘和鼠标事件的详细输入,以及涉及用户与控制台窗口交互的事件。低级功能还可以更好地控制屏幕输出。

     

此概述介绍了对字符模式应用程序的支持。

     

将有关此主题的评论发送给Microsoft

     

建造日期:2006年10月2日

CMD也是Telnet界面。

答案 2 :(得分:4)

同意cmd不是终端模拟器,是否是 shell 取决于您的期望。 Microsoft将其称为command interpreter。作为命令解释器(包括各种内置功能 - 请参阅 Command-line reference A-Z ),它能够解释脚本。终端仿真器关注 display 和输入/输出 - 完全不同。

然而,关于控制台窗口的答案部分没有它本来的帮助。

控制台窗口是Windows应用程序的一个特例:它们模拟MS-DOS等的行为,但在其中运行(或使用它们)的应用程序不仅限于MS-DOS行为,因为控制台窗口是在所有 Windows应用程序

AllocConsole的文档说:

  

此功能主要由图形用户界面(GUI)应用程序用于创建控制台窗口。无需控制台即可初始化GUI应用程序。控制台应用程序使用控制台进行初始化,除非它们是作为分离的进程创建的(通过使用DETACHED_PROCESS标志调用CreateProcess函数)。

以下是一些可以进一步讨论的链接:

关于OP的最后一个问题:cmd.exe是Windows上的默认命令解释器,关联与" .bat"文件后缀(即,当Windows被告知"open"后面带有" .bat")的文件时,它是由默认调用的程序。文件关联(主要)是Windows文件资源管理器中使用的功能。 Unix中的类似功能是mailcap配置。

在Windows惯例中,您可以打开"具有替代应用程序的文件,将其用作应用程序的参数。的Windows' cmd.exe有一个特殊命令start,可用于使用默认应用程序打开文件(例如参见 Open a file in the default application using the Windows command line (without JDIC)

与Unix shell解释器一样,cmd有一个选项(/c),允许您使用给定的命令字符串显式运行它。有Windows的第三方命令解释器;有些延伸cmd.exe,而有些则是Unix程序的端口。

答案 3 :(得分:0)

CMD.EXE的历史可以追溯到IBM需要基于x86的IBM PC计算机的命令行界面的时候 - 微软制造的MS-DOS(磁盘操作系统)是第一个接口,它是间接受Unix风格的shell界面影响,因为它有可能导航子目录,在PATH中执行命令,还可以创建.BAT文件,这些文件在续集中运行几个命令。

在图形用户界面成为商品后,CMD.EXE被创建为DOS模拟器,可以运行较旧的基于MS-DOS的程序,能够模拟旧的基于EGA / VGA的显示器,主要是在文本模式下。也可以在全屏模式下模拟图形模式。之后,从CMD.EXE中删除了对旧图形模式的支持,其存在的目的是面向高级用户的基于文本的界面。

然而,与Unix系统相比,CMD.EXE是传统接口并且仍然较差。此外,它无法访问许多功能来正确管理重要的Windows操作系统任务 - 这是Unix用户认为理所当然的事情。在2000年初,微软开始使用命令行界面PowerShell开发运行高级用户管理任务的替代方法。

答案 4 :(得分:0)

CMD让我想起了Windows 1.0之前的DOS。与使用所有MS Windows操作系统相比,使用MS.DOS 6.22导致的崩溃更少。而且病毒问题也更少。 即使CMD.exe无法与Unix或Python或Apple软件匹配,它仍在进行中,如果作者愿意,可以进行重大改进。

在某些方面,它类似于那里的其他外壳-却比其他外壳更精巧。我猜想随着DOS和CMD.exe变体而成长-我已经知道它的许多优点。实际上,如果有人在阅读Microsoft,请加强控制台!在那里你听到了。