终端和 bash 有什么区别?

终端和 bash 有什么区别?

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

Last login: Fri Feb 20 14:30:56 on ttys000
Korays-MacBook-Pro:~ koraytugay$ bash
bash-3.2$ 

例如我可以运行如下命令ls或者ls -l在终端和“bash-3.2$”中

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

答案1

猛击是最受欢迎的命令行 shell
,其主要任务是启动其他程序(以及一些辅助功能)。命令行部分表示您可以通过一次输入一行命令来控制它。
严格地说,通过双击图标来启动程序的 GUI 也是一个 shell,但实际上人们所说的“shell”大多是指命令行。

所有现代命令行 shell 都以抽象的字符流的形式接收输入并发送输出,这些字符流的另一端可以连接到键盘、打印机、文件或其他程序。shell 大多不关心这些 - 它读取字符,将其解释为命令,告诉它运行其他程序,并写回字符,例如“找不到命令”。当它运行另一个程序时,默认情况下它会将该程序的输入和输出连接到相同的流。

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

当您打开终端应用时,它会自动打开一个 shell 来连接您。在其设置中,您可以选择不同于 Bash 的 shell。如果您愿意,甚至可以让它使用一个根本不是 shell 的程序 - 虽然不太有用,但它展示了终端只关心字符的传入和传出,而不关心 shell 如何处理它们。

当你bash在 Bash 中输入内容时(通过终端)会发生什么?它会启动 Bash 程序 - 即其内部的另一个副本。

预计到达时间:迅速的在你输入每个命令之前,Bash 会给你提供一些有用的自定义信息,并且可以通过变量 进行控制(使用特殊格式)PS1。尝试echo $PS1在 Bash 的父实例和子实例中输入。

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

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

答案2

一次终端字面上地指的是一个输入内容的框,远程连接到主机。

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

在此处输入图片描述

现代“终端”是终端仿真器它的行为与标准终端大致相同。因此,您正在运行终端接收或者其他。终端提供了一种输入命令的机制。

您运行命令处理器,或者, 最重要的是 -狂欢韓軟體或其他。这实际上将输入到终端的文本转换为计算机执行的指令。大多数 shell 允许编写脚本,并且您会看到 bash 或 csh 之间的语法非常不同。它们在不同的终端上运行方式类似。

答案3

也可以看看https://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on

您可以首先尝试找出终端仿真器窗口中正在运行的 shell echo $0echo $SHELL

相关内容