检查我对 Terminal 和 Shell 之间区别的理解

检查我对 Terminal 和 Shell 之间区别的理解

我正在尝试测试我对终端和 shell 之间区别的理解。终端只是一个基于文本的界面,它接受来自用户的命令。此外,终端执行 shell。shell 是一个命令行解释器。也就是说,它负责将命令转换为操作系统要执行的形式,因此它实际上是命令的解释器。有许多类型的 shell,例如 Bourne Shell(sh)和 Bourne Again Shell(bash),它是 的扩展版本sh。一般来说,每种 shell 风格都有自己的特点,如果它们符合标准(例如),它们的语法非常相似POSIX。对吗?如果我错了,请纠正我。

答案1

此外,终端执行 shell

是的,一般来说确实如此,假设您谈论的是“终端模拟器”应用程序。

(之所以这样称呼,是因为它们模仿身体的终端,那些终端没有执行 shell – 它们连接到运行 shell 的计算机,有点像 PuTTY 是一个终端仿真器,它不在本地运行任何 shell,它只是通过 SSH 连接到远程计算机。)

不过值得一提的是,Windows 在某种程度上是个例外,而它原本是相反的——在 Windows 中,您可以直接启动 shell,例如 Cmd.exe(或任何其他基于控制台的 .exe 文件),系统会自动为其弹出“Conhost”控制台窗口,无法手动启动。(这里的重点是 Cmd.exe 是一个 shell,而不是终端,Windows 的行为常常引起混淆。)

随着 Windows 控制台系统重新设计,这种情况确实有所改变,这是创建新的“Windows 终端”应用程序(它从 Unix 中引入了伪终端等各种概念)的一部分:原来的行为仍然存在,但现在你启动 Windows 终端,然后它就会运行 shell,就像您期望的那样。

shell 是一个命令行解释器。也就是说,它负责将命令转换为操作系统要执行的形式,因此它实际上是命令的解释器。有许多类型的 shell,例如 Bourne Shell (sh) 和 Bourne Again Shell (bash),后者是 sh 的扩展版本。一般来说,每种 shell 类型都有自己的功能,如果它们符合 POSIX 等标准,它们的语法非常相似。这样对吗?如果我错了,请纠正我。

是的,尽管 shell 的种类远不止 Bourne/POSIX 风格;shell 不必符合 POSIX – 例如,csh/tcsh非常在过去被广泛使用(csh 比 Bash 早十年,并且其语法与 Bourne 非常不同),Fish 现在似乎相当流行,更不用说 Windows 上的 PowerShell 和 Cmd.exe、VMS 上的 DCL 等等。

只有位于 的特定 shell 才/bin/sh需要符合 POSIX 标准(如果整个系统首先旨在实现某种程度的 POSIX 标准)。因此,BSD 默认使用非 POSIX shell(如 tcsh)进行交互使用,同时仍然包含一个 POSIX 兼容 shell(位于 /bin/sh)用于脚本,这是相当常见的做法。

相关内容