分享

Unix V6 Shell源码完全剖析

 柏家香阅读馆 2014-02-23
孰优孰劣

尽管Thompson Shell是一款优秀的命令解释器,还产生了多项历史创举,但遗憾的是依然得不到命运女神的垂青,这要归咎于其自身的缺陷——功能单一、命令分散、控制流过于简单,尚无法用来编写脚本(scripting)。随着Unix日益壮大,它已经无法应付趋于繁杂的编程项目了。那时还出现了一个叫John Mashey的人写的PWB Shell(又叫做Mashey Shell),基于Thompson Shell做了些改进,扩展了命令集,增加了shell变量,还增加了if-then-else-endif,for,while等控制逻辑。不幸的是它比Thompson Shell更短命,因为1977年它遇上了一个强劲的对手。

没错,那就是Bourne Shell,它的主要优点是真正实现了结构化脚本编程,比之前的shell实现得都要好,更要命的是它与前两个shell都不兼容,于是一场标准化的论战开始了。在David Kornksh作者)写的“ksh – An Extensible High Level Language”一文中提及,Steve Bourne和John Mashey在三次连续的Unix用户组集会上争论他们各自的理由。在这些集会之间,各自增进他们的shell来拥有对方的功能。还设立了一个委员会来选择标准shell,最终还是选择了Bourne shell作为标准。

于是从Unix V7开始就有了前面所说的”Bourne Shell Family”。然而历史上没有完美的技术,随着八、九十年代操作系统迅猛发展,针对Bourne Shell的诟病也越来越多了。在解释器本身实现上,我看到网上一个对其评价是“universally considered to be one of the most horrible C code ever written”,至于原因去看一下mac.h就知道了,包括基本运算符、关键字在内的大量宏定义使得整个代码看上去简直不是C写的,也许Bourne是想把解释器打造成自己独特的风格吧,也难怪后来的bash以“born again”命名就是对其祖先的戏谑性调侃。另外内存管理上的一些毛病带来平台可移植性问题,至于其中的技术细节有点高级,超出本文范畴。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多