TerminalConsoleShellCommand Line 这几个词汇经常同时被使用,也因此他们的含义很容易被混淆。本文将尝试解释这几个词汇的含义。

用户输入的文本命令是 Command LineShell 负责将其转译成操作系统能够理解的指令,并获取操作系统的执行结果。
TerminalConsole 负责提供用户可以输入 Command Line 的界面和展示命令的执行结果。

#Command Line

Command Line 是用户通过文本与操作系统交互的方式,与之相对即是基于 GUI 的交互方式。

cdlsGet-Command 这些文本都是 Command Line

用户输入的 Command Line 将通过 Shell 传递给操作系统,操作系统执行指令并返回结果。

#Shell

ShellCommand Line 的转译软件,它负责将 Command Line 转译成操作系统能够理解的指令,并获取操作系统的执行结果。Shell 并无 GUI 界面,它只是一个接受文本数据(Command Line)并返回执行结果的软件。

  • 每一个 Shell 都有自己的语法,也因此,每一个 Shell 所能转译的 Command Line 是不同的。

BashFISHPowerShell 都是 Shell。

因为 PowerShell 软件本身也提供了 GUI 界面,因此 PowerShell 严格意义上是 ShellConsole 的结合体

Shell 通过 Terminal 或 Console 展现其执行结果。

#Terminal and Console

TerminalConsole 两个词汇含义非常相同:用户在键盘上输入 Command LineTerminalConsole 都负责将执行结果展现给用户。在很多情况下,这两个词汇可以互换使用。

在早期,TerminalConsole 都表示的与计算机连接的物理设备,如键盘和显示器。

  • Terminal:连接到主机的物理设备,连接的目标类型并不做要求,可以是本地的主机,也可以是远端的主机。一个 Terminal 可以连接至多个不同的主机。
  • Console:是 Terminal 的一种形式,特指连接到本地主机的物理设备。一个 Console 在同一时间,只能连接到一个主机。

Terminal 的抽象等级相对于 Console 更高。ConsoleTerminal 的一种特例。

在现代,TerminalConsole 两个词汇更多的是指软件,而非物理设备,他们都是指用来与操作系统进行交互的,拥有 GUI 界面的软件,Shell 需要运行在其中。 Console 仍然是 Terminal 的一种特例。

  • Terminal:接受用户的指令,并将指令的结果展现在 GUI 界面上。一个 Terminal 可以同时运行多个不同的 Shell
  • Console:是 Terminal 的一种特例,接受的指令和显示的结果,通常都是纯文本的。一个 Console 同时只能运行一个 Shell

许多 Shell 程序,如 PowerShell,都配有内置的Console。尽管这些 Console 主要设计用于各自的 Shell,但通常它们也允许运行其他的 Shell。例如,在 PowerShell 的 Console 中,用户可以启动 cmd,即 Windows Command Prompt。

在 IDE 中,Console 也会被用来描述程序输出信息的展示窗口,此时它就不再局限于为 Shell 服务。

Iterm2](https://iterm2.com/) 和 [Windows Terminal 都是 Terminal

#Reference

Difference Between Terminal, Console, Shell, and Command Line (tutorialspoint.com)

Terminal vs Console: Choosing the Right Interface for OS Tasks (linkedin.com)