Bash外壳的诞生

Shell脚本对于具有sysadmin类型角色的任何人都是必不可少的学科,当今人们在其中编写脚本的主要Shell是Bash。 Bash几乎是所有Linux发行版和现代MacOS版本中的默认设置,并且很快就会成为Windows Terminal的本地组成部分。 您可以说Bash无处不在。

那么它是如何到达这一点的呢? 本周的“ 命令行英雄”播客通过询问编写代码的人员深入探讨了这个问题。

它始于Unix

像所有编程一样,我们必须回到Unix。 一段外壳历史:1971年,肯·汤普森(Ken Thompson)发布了第一个Unix外壳-汤普森(Thompson)外壳。 但是,用户可以执行的脚本数量受到严重限制。 这意味着对自动化以及因此对整个IT运营领域的严格限制。

这项出色的研究概述了早期尝试编写脚本所面临的挑战(加粗以突出显示命令):

类似于其在Multics中的前身,此shell( / bin / sh )是一个独立的用户程序,在内核外部执行。 诸如globbing(用于参数扩展的模式匹配,例如* .txt )之类的概念是在名为glob的单独实用程序中实现的, if命令用于评估条件表达式。 这种分离使壳很小,碳源低于900行。

Shell引入了一种紧凑的语法,用于重定向( <>>> )和管道( |^ ),这些语法在现代shell中仍然存在。 您还可以找到对调用顺序命令(带有; )和异步命令(带有 )的支持。

Thompson shell缺乏脚本编写能力。 它的唯一目的是作为一个交互式外壳程序(命令解释器)来调用命令并查看结果。

随着对终端的访问的增长,对自动化的兴趣也随之增长。

伯恩贝壳是前进的一步

在Thompson发行6年后的1977年,Stephen Bourne发行了Bourne shell,这是为了解决Thompson shell的脚本限制。 (Chet Ramey自1990年以来一直是Bash语言的主要维护者,在本期《命令行英雄》中对此进行了讨论)。 贝尔实验室作为Unix系统的一部分,这是技术的自然发展。

伯恩打算做什么不同的事情? 研究员M. Jones很好地概述了这一点:

Bourne Shell具有两个主要目标:充当命令解释器,以交互方式执行操作系统和脚本命令(编写可通过外壳调用的可重用脚本)。 除了替换汤普森(Thompson)外壳外,伯恩(Bourne)外壳也比其前身具有多个优势。 Bourne将控制流,循环和变量引入脚本中,从而提供了一种更具功能性的语言来与操作系统进行交互(交互和非交互)。 该外壳程序还允许您将外壳程序脚本用作过滤器,为处理信号提供了集成支持,但缺少定义函数的能力。 最后,它合并了我们今天使用的许多功能,包括命令替换(使用反引号)和HERE文档,以将保留的字符串文字嵌入脚本中。

伯恩(Bourne)在先前的采访中是这样描述的:

最初的shell并不是一种真正的语言。 它是一种记录-一种执行文件中线性命令序列的方式,唯一的控制流原语是GOTO标签。 肯·汤普森(Ken Thompson)所写的原始外壳的这些限制非常重要。 例如,您无法轻松地使用命令脚本作为过滤器,因为命令文件本身是标准输入。 在过滤器中,标准输入是您从父进程继承的内容,而不是命令文件。

最初的外壳很简单,但是随着人们开始使用Unix进行应用程序开发和脚本编写,它变得太受限制了。 它没有变量,没有控制流,并且引用能力非常不足。

对于脚本编写者而言,这个新的shell是一个巨大的进步,但前提是您可以访问它。

重新考虑伯恩的外壳作为免费软件

在此之前,占主导地位的外壳是由贝尔实验室拥有并运营的专有软件。 如果您足够幸运,您的大学可能会使用Unix shell。 但是,这种受限的访问距离自由软件基金会(FSF)想要实现的目标还很遥远。

理查德·斯托曼(Richard Stallman)和一群志趣相投的开发人员正在使用可根据GNU许可免费获得的许可来编写Unix的所有功能。 其中一位开发人员的任务是制作外壳。 那个开发商是Brian Fox。 他谈论自己的任务的方式绝对让我着迷。 正如他在播客上所说:

之所以如此具有挑战性,是因为我们必须忠实地模仿Bourne外壳的所有行为,同时允许对其进行扩展以使其成为人们使用的更好工具。

也是在人们讨论壳标准意味着什么的时候。 以此历史为背景,并在竞争中脱颖而出,重新设计了流行的Bourne贝壳; 重生。

壳,再次伯恩

这两个催化剂-自由软件的使命和竞争-使Bourne-Again shell(Bash)栩栩如生。 当时的不寻常举动是,Fox没有以自己的名字命名自己的外壳,而是专注于从Unix到自由软件的演变。 (尽管Fox Shell可以在fsh命令#missedopportunity中击败Fish外壳)。 这种命名选择似乎与他的个性相符。 就像福克斯在剧集中所说的那样,他甚至对个人荣耀的感觉都不感兴趣。 他试图帮助编程文化发展。 但是,他并没有超越一个好的双关。

很高兴听到伯恩(Bourne)没有被文字游戏所打动。 伯恩(Bourne)讲述了一个故事,当时有人走到他身边,并在会议上给他送了Bash T恤。 那个人是布莱恩·福克斯。

贝壳 已发行 创作者
Thompson Shell 1971年 肯·汤普森
Bourne Shell 1977年 斯蒂芬·伯恩
Bourne-Again Shell 1989年 布莱恩·福克斯

随着时间的流逝,Bash逐渐普及。 其他工程师开始使用它并提交对其设计的改进。 确实,几年后,福克斯坚持要学会放弃对Bash的控制是他一生中最重要的事情之一。 随着Unix被Linux和开源软件运动所取代,Bash成为了开源世界中的关键脚本力量。 伟大的项目似乎超出了一个人的视野范围。

我们可以从贝壳中学到什么?

外壳是日常笔记本电脑必不可少的一项技术,很容易忘记它所需要的发明。 从汤普森(Thompson)到伯恩(Bourne)到巴什(Bash)炮弹的故事吸引了一些熟悉的收获:

  • 积极进取的个人可以怀着正确的使命而取得长足的进步。
  • 我们今天所依赖的大部分内容都是建立在我们行业中仍然活着的传奇人物的工作之上。
  • 倾向于生存的软件是那些超出其原始创作者视野的软件。

Command Line Heroes涵盖了第3季的所有编程语言,并且正在接近尾声。 一定要订阅以了解关于编程语言起源的所有知识 ,我很乐意在下面的评论中听到您的shell故事。

翻译自: https://opensource.com/19/9/command-line-heroes-bash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值