“Shell”是用于运行其他程序的任何程序.它包裹了另一个程序,因此它的名字.所以例如,Windows资源管理器是一个shell,即使很少有人会称之为一个.在我使用的所有语言和平台中,任何程序都可以是shell.
编辑:我没有定义一个“终端”.它的名字从与用户的通信的终点.具体来说,是用于最终用户通信的打字机.今天,它更为通用,可以意味着伪终端(Linux ps -ef中的pts),它是由GUI管理的基于字符的会话.在Windows上,这将被称为“控制台窗口”.
“控制台”是指Windows和UNIX上具体但不同的特性.在UNIX上,原来这是tty(TeleTYpewriter,一个VDU是一个“玻璃电传”),它实际上已插入机器,甚至不通过加密狗(我用UNIX回去了很长时间).发送和接收启动和关闭消息的终端,以及诸如PANIC的警报. bash和Korn shell脚本都可以作为伪守护进程运行,而无需TTY /控制台.
术语“控制台”往往与“标准输入”,“标准输出”和“标准错误”(stdin,stdout,stderr,C)混淆.这些有时被称为流,并且默认被定向到大多数系统上的终端.在UNIX上,它们是前三个文件描述符,在Windows上,前三个文件句柄,两个都是0,1,2.程序可以将它们引导到具有适当访问权限的任何文件系统,但通常它不会 – 它通常从父进程继承它们(并非所有的操作系统都在过去这样做).
在Windows上,“控制台”程序是具有控制台窗口的程序,通常不正确地称为“DOS”框.所以,cmd.exe是一个控制台程序,Perl.exe也是如此,python.exe(但不是pythonw.exe)也是如此.
命令提示符是命令行解释器或CLI显示的请求类型.按照惯例在UNIX上,除了root以外的所有用户都以$结尾,以#结尾. csh不遵循此约定并使用%.通常,Windows CLI上的提示符以>结尾.在所有情况下,这些都可以由用户改变.
我相信Windows上的cmd.exe的快捷方式和窗口标题具有标签“命令提示符”,因为它可以访问命令提示符.我有一本名为“Windows命令行”的Microsoft新闻书,其中“命令行是通过命令shell窗口访问”.所以即使是微软混合他们的条款.
所以,cmd.exe是一个shell和一个CLI,一个控制台程序. sqlplus是一个CLI,但不是一个shell,在Windows上它是一个控制台程序. Windows资源管理器是一个shell,但不是CLI或控制台程序. Bash和Korn shell都是具有CLI的shell,并且可以从控制台运行,但并不排他.