“ Shell”和“ Bash”这两个术语有什么区别?


11

“ Shell”和“ Bash”之间的区别是什么?这些术语是什么意思?

据我所知,没有区别。但是我看过很多关于“壳牌”的书,还有一些关于“ Bash”的书!

因此,如果我想在Mac OS X上使用Terminal并编写一些bash脚本,我想知道我应该买哪种书。


7
这是类与实例的区别。
卡兹(Kaz)2012年


1
第一个外壳是由一个叫做Bourne的人写的。BASH是“ Boune Again Shell”的首字母缩写。开心很重要!
Kinjal Dixit 2012年

Answers:


31

外壳 ”是提供操作系统接口的任何软件。例如,explorer.exe是Windows中的默认外壳程序(尽管存在替代方法),并且在OS X Finder中提供了许多相同的功能。在Linux / * nix上,外壳可以是桌面环境的一部分(如GnomeKDE),也可以是位于其之上的独立软件组件(如UnityCinnamon)。

上面的示例是使用窗口,菜单,图标和其他此类元素的组合的所有图形外壳,以提供可以使用鼠标光标进行交互的图形用户界面(GUI)。但是,在Bash之类的软件或编写脚本的环境中,“外壳”通常是指命令行解释器,除了完全基于文本外,它还执行与图形外壳基本相同的任务。

Bash是命令行Shell的特定示例,并且可能是最著名的命令行Shell之一,它是许多Linux发行版和OS X中的默认外壳。它是Bourne Shell的替代产品(Bash stand代表“ Bourne Again Shell”),第一个Unix shell之一

Windows上的命令行Shell的示例包括cmd.exe(aka命令提示符)和PowerShell


3
Finder在OS X上通常不称为外壳。大多数GUI和窗口管理功能均由其他进程处理。
Lri 2012年

1
@LauriRanta 维基百科似乎不同意。不管它是否从其他过程中获得帮助,它的工作都是使用户能够通过GUI与基础OS进行交互,因此适合图形外壳的描述。
德雷克(Indrek)

1
我猜想图形外壳这个词也可以应用于文件管理应用程序。但是它通常不在OS X上使用,并且Finder更像Nautilus,而不是Windows Shell或Unity。
Lri 2012年

6
@LauriRanta:快速测验,Nautilus的图标是什么?
Lie Ryan

2
@LauriRanta Dock会不是壳的更好人选?启动程序和打开文档,Expose / Spaces / Mission Control,AFAIK Launchpad和任务切换器都是Dock的功能。
丹尼尔·贝克

13

Bash是几种外壳之一。

诸如OSX或Linux之类的Unix或类似Unix的系统上的外壳程序是一个应用程序,它为操作系统提供命令行界面,使您可以键入命令并运行它们。有许多不同的外壳可供选择,但是它们都提供文件名通配符,管道,此处的文档,命令替换,变量以及用于条件测试和迭代的控制结构。

最初的Unix shell是Bourne shell,由Bell Labs的Stephen Bourne编写。接下来是由Berkeley的Bill Joy编写的C shell,自从更新为tcsh以来。其他shell包括由Kell shell,ksh(由Bell Labs的David Korn编写),以及bash(由Brian Fox为GNU项目编写的“ Bourne Again shell”),它是sh的免费替代品。

如今,bash可能是最受欢迎的Unix shell,但是许多人(包括我在内)仍然更喜欢基于其更好的语法(对我们中的某些人而言)的C shell。基本上,这是一个品味问题,因此,我建议阅读我链接的Wikipedia文章,以帮助您入门。


2
Shell不一定是基于命令行的,也有很多图形化的Shell,例如Nautilus,Windows Explorer,Finder等。Shell的关键点是它是围绕核心OS功能/系统调用的包装器/用户界面/ Shell,即shell提供资源管理(例如文件管理)和进程管理。
Lie Ryan

1
@LieRyan不是shell,而是文件管理器。Shell允许集成的命令/脚本解释器在其中运行。看我的答案。仅仅能够从文件管理器运行程序并不能使其成为外壳。
Bill Rosmus

@BillR:您应该将您的定义告知Gnome Shell。
paradroid

2
我倾向于同意Lie Ryan和paradroid的观点,即图形化外壳现在被视为外壳。我和任何人一样,都对命令行范例有所投入,并拒绝接受图形外壳作为90年代的外壳。但是,对于所有控制面板小部件以及现代图形外壳中没有的所有部件,我现在都同意将它们称为外壳是通用用法,并且这种用法是正确的。它们与外壳的定义相匹配,外壳是围绕底层OS的相对较薄的用户界面层。图形外壳在任何人如何编写任何脚本方面都较弱,但许多用户对此并不在意。
妮可·汉密尔顿

6

术语“外壳”是很好的称呼。它实际上是操作系统的外壳,允许用户与计算机交互。最初构想时,几乎没有图形用户界面(没有windows :()。所有操作都在命令行上完成。但是即使命令行也需要一个居住的地方。它在shell中一直存在并且仍然存在) 。

简而言之,为了使命令行有用,它需要可以调用的指令。因此,使程序可以在shell内运行以供命令行使用。这些程序紧密地组合在各自的程序包中,并打算一起工作。它们包括“ ls”和“ grep”,“ ps”,“ sed”等程序。它们还包括“>”和“ <”之类的文件重定向命令以及管道(“ |”)。更重要的是,它们还包括诸如条件操作之类的编程结构(如果是,则为for循环,而while循环为运行语句时检查返回状态的方法(例如,如果运行“ ls”,它是否找到了东西?))像那样)。这些是更复杂的命令行(shell)脚本的基础,

当有人使用“ Bash Shell”一词时,他们谈论的是在O / S Shell中运行的命令行解释器“ Bash”。您可以认为它是“ Bash Shell Interpreter”的简称。还有其他译员,例如Bourne(Bash是'Bourne Shell的新改进版,它是Bourne Again Shell的缩写)。还有C-Shell,K-Shell(受到许多编写复杂的shell脚本的人的青睐)和其他GNU变体。多年以来,引用作为外壳程序使用的特定命令行解释器已成为一种习惯,因为一个不能没有另一个就不能使用。但是现实是它们是不同的。

至于为什么它们被正确地称为命令行解释器而不是实际的shell:这是因为它们存在于shell中,并像在程序中运行一样解释所有命令。只要符合正确的标准,shell都不关心您在其中运行什么解释器。

至于为什么将它们称为口译员,是因为它们确实是口译员。即使您没有明确运行脚本(脚本实际上只是您创建的命令的文本文件,这样您也可以一遍又一遍地执行相同的命令,而不必再次键入它们)。例如,使用不起眼的“ ls”命令。运行它时,它将返回文件列表。但是它的运行方式对您的问题更为重要:它实际上在命令行解释器的上下文中运行,即使您只是运行一个简单的一次性命令也是如此。也就是说,它的运行就像是更大程序中的一部分。它就像在Shell脚本脚本文件中一样运行,而实际上不在Shell脚本文件中。匿名的shell脚本文件。

您在命令行上运行的所有内容都有此共同点(无论是像“ ls”这样的单个命令,还是包含命令,迭代器和条件语句的脚本文件):所有这些都由命令行解释器处理;是Bash,C-Shell,K-Shell(在AIX btw上默认)。

要了解我的意思,请创建目录“ test”:

mkdir test

输入它并运行以下命令

grep hello * 

您将得到某种响应,例如“无此文件或目录”。现在输入命令

echo $?

($?说,告诉我您在秘密计算机中发现的内容。)您应该看到它返回一个数字(应该是)“ 2”。那是grep的返回码,表示“没有这样的文件或目录”。现在运行以下命令:

echo hello > hello.txt
grep hello *
echo $?

您将看到初始grep命令返回的文件“ hello.txt”,现在应该看到“ echo $?”。返回数字“ 0”,表示它实际上找到了一些东西。

即使运行了这些看似一次性的命令,命令行解释器的行为仍像它们是较大程序的一部分,并跟踪其返回值。这就是为什么如果您忘记了grep命令末尾的*,它不会返回的原因。知道该语句是不完整的,并且需要更多输入。毕竟,可以想像的是,您可能会要求它grep某个循环的结果,该循环在命令行上编写和运行是完全合法的。

底线是外壳,就是外壳,而解释器(无论您使用的是哪个名称,“ Bash”,k-shell等)都不同。但是通常它们可以互换使用,因为在任何给定的瞬间它们都被完全绑在一起。


2

Shell是基于文本的用户界面。

Bash是一种Shell。


2
什么是“基于测试的用户界面”?扩展您的答案也将是一件好事。从其他答案中可以看出,它总是有助于提供更多的上下文。
slhck 2012年

抱歉。基于文本的用户界面。您希望我如何对此进行解释?Shell是您与操作系统内核进行交互的命令行方式。Shell会解释您的命令并将其中继到计算机,然后由计算机执行与您给定的命令相关的必要操作?没有500页的手册,很难有效地解释这个模棱两可的问题。答案的努力与问题的努力是一致的。这个问题是苹果到桔子。
HayekSplosives,2012年

如果您认为一个问题表明现在的努力并不总是意味着您不应该为此付出努力。与其他答案相比,您的答案缺少一些细节。当然,这取决于您。
slhck 2012年

我感谢个人责任方面的纠正和教训。感谢您保护那些不愿意付出努力的人。我完全忘记了我欠海报多少钱。
HayekSplosives 2012年


1

bash 是存在的许多外壳之一。

所有壳都有它们的异同。例如,用bash编写的脚本可能与另一个shell(例如zsh)完全或很大程度上兼容。

由于这一事实bash非常普遍,因此通常暗示脚本与此脚本兼容。

如果您想购买一本书,请购买专门为要使用的外壳写的书。不过,在花钱之前先阅读一下它们之间的差异是个好主意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.