当我在 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
答案3
也可以看看https://stackoverflow.com/questions/3327013/how-to-determine-the-current-shell-im-working-on。
您可以首先尝试找出终端仿真器窗口中正在运行的 shell echo $0
。echo $SHELL