终端和外壳是一样的吗?

Vam*_*ani 30 command-line

我知道这听起来可能很愚蠢,但我只是想知道 Linux 世界中使用的两个词之间是否真的有区别。我确实知道 Shell 是一个命令行界面,并且有许多变体,例如 Bash、Korn 等。我还知道 Ctrl+Alt+T 会在 Ubuntu 上启动终端。我只是想连接这两个点。

这是否意味着终端是打开的窗口,而 shell 是在后面运行以解释在窗口中键入的命令的程序?或者它们是否相同,其中终端是用于抽象 Shell 等概念的通用术语?

究竟是什么使这两个词区分开来?

gei*_*rha 31

终端模拟器(通常简称为终端)是“只是窗口”,是的。它运行一个基于文本的程序,默认情况下是您的登录 shell(在 Ubuntu 中是 bash)。当您在窗口中键入字符时,终端除了将这些字符发送到 shell(或其他程序)的 stdin 外,还会在窗口中绘制这些字符。shell 输出到 stdout 和 stderr 的字符被发送到终端,终端依次在窗口中绘制这些字符。

所以是的,shell 和终端模拟器是完全独立的程序,两者都可以单独使用。

  • @KorayTugay,当您从 cron 或通过桌面启动器(您没有选中“在终端中运行”)运行 shell 脚本时,您使用的是没有终端的 shell。 (6认同)
  • 如何在没有终端的情况下使用 shell? (2认同)

Gee*_*eeb 8

我认为这个问题已经在 Unix 和 Linux 堆栈交换站点上进行了非常彻底的探讨:shell、控制台和终端之间的差异

  • 也许您可以将链接的基本部分添加到您的答案中? (3认同)

Jon*_*ast 6

是的,终端模拟器和 shell 是两个不同的程序。如您所知,差异的一个示例是启动终端窗口可以运行不同的 shell,具体取决于您的配置(bash、tcsh、ksh、ash,甚至是 python!)。

另一个不同之处在于,除了默认的终端仿真器之外,还有更多的终端仿真器:gnome-terminal、多种 xterm、konsole(用于 KDE)等(请参阅:http : //www.howtogeek.com/howto/ubuntu/set- the-default-terminal-emulator-on-ubuntu-linux/)。任何 shell 都可以在这些终端仿真器中的任何一个中运行,没有太大困难。

第三个区别是,除了运行shell命令之外,你还可以在终端模拟器中启动某些交互式应用程序,它们会在同一个窗口中运行(并且仍然依赖同一个终端模拟器程序来处理实际图形),例如vim 文本编辑器、nethack RPG 等。如果你愿意,你可以在你的终端模拟器中设置一个配置文件来启动 nethack,比如说,当你打开一个新标签时自动启动;不涉及外壳,但终端模拟器仍然是同一个程序。

第四个区别是您可以使用 ssh 之类的程序从终端窗口内执行远程登录。在这种情况下,您的 shell(或您远程运行的任何程序)正在另一台计算机上运行,​​并且 ssh 程序将它连接到您的机器上运行的本地终端仿真程序,该程序处理图形。