终端和bash有什么区别?

Kor*_*gay 9 linux terminal bash terminology macos

当我在 Mac OS X 中打开终端窗口时,我可以输入 bash 并按回车键,我会看到:

Last login: Fri Feb 20 14:30:56 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ 
Run Code Online (Sandbox Code Playgroud)

例如,我可以在终端和“bash-3.2$”中运行诸如lsls -l 之类的命令

什么是终端下运行的 bash 以及终端本身是什么?

hem*_*lit 12

Bash是流行的命令行 shell 之一,它的主要工作是启动其他程序(除了一些辅助功能)。
命令行部分装置通过键入控制它命令在每次一行。
正确地说,用于通过双击图标启动程序的 GUI 也是一个 shell,但实际上“shell”人们大多是指命令行的。

所有现代命令行 shell 都接受输入并将输出作为抽象的字符流发送,这些流的另一端可以连接到键盘、打印机、文件和另一个程序。shell 基本上不在乎 - 它读取字符,将它们解释为告诉它运行其他程序的命令,并写回诸如"command not found" 之类的字符。当它运行另一个程序时,默认情况下它将该程序的输入和输出连接到相同的流。

现在,终端是一个在 shell 和用户之间提供图形界面的程序。它从 shell 接收例如字符“未找到命令”并计算出如何向您显示它们 - 使用什么字体,在屏幕上的位置,什么颜色,是否应该有滚动条。当您按下某些键时,它会确定是将它们作为字符(例如ls -l)发送到外壳程序,还是自行解释它们(例如 ?C)。

当您打开终端应用程序时,它会自动打开一个 shell 来连接您。在其设置中,您可以从 Bash 中选择不同的 shell。如果你觉得厚脸皮,你甚至可以让它使用一个根本不是 shell 的程序——不太有用,但它展示了终端如何只关心传入和传出字符,而不关心 shell 对它们做了什么.

当您输入bashBash(通过终端)时会发生什么?它启动程序 Bash - 也就是说,它自身内部的另一个副本。

ETA:在您输入每个命令之前,Bash 给您的提示是有用的可定制的,并由变量控制(使用特殊格式)PS1。尝试输入echo $PS1Bash 的父实例和子实例。

从终端应用程序运行时,该变量设置为提示您输入机器名称、目录和用户。这是在 中为您/etc/bashrc设置的,但您可以设置一个新值,最好是在 中~/.bash_profile。注意。这有点特定于 OSX;在大多数其他系统上,您更喜欢~/.bashrc这样做。

当您只运行 Bash 的子实例时,/etc/bashrc不会重新执行,因此不会设置此变量。它也没有设置为由子 shell 继承(这完全是环境变量的事情),所以 Bash 恢复到无用的默认设置,只显示它正在运行的版本。


Jou*_*eek 11

终端曾经的字面意思是您输入的一个盒子,远程连接到大型机。

事实上,您的现代“终端”可能会模拟其中之一

在此处输入图片说明

现代“终端”是终端仿真器,其行为大致类似于标准终端。所以你正在运行xtermrxvt或其他东西。终端提供了一种输入命令的机制。

您在其上运行命令处理器或shellbashfishcsh或其他。这实际上将输入到终端中的文本转换为计算机执行的指令。大多数 shell 允许编写脚本,您会看到 bash 或 csh 之间的语法非常不同。它们将在不同的终端上以类似方式运行。