伯克利的交互式命令环境

C Shell在1978年前后的加州大学伯克利分校Unix环境中形成,主要设计者是比尔·乔伊。它的程序名为csh,负责把用户在终端输入的命令交给相应程序执行。早期手册特别强调交互使用:用户不仅需要写批处理文件,也需要反复运行、修改刚刚输入的命令。

乔伊在伯克利同时参与编辑器和软件分发工作。不同型号终端逐步进入学校,vi和termcap帮助解决屏幕编辑与终端差异;C Shell则改进人与系统之间的命令交互。这些工具后来一起进入伯克利软件发行版,使编辑文件、编译程序和检查结果形成相互衔接的工作环境。

参考:[1] [2]

原始手册中的协作痕迹

2BSD保存的手册署名为乔伊,其致谢具体记下迈克尔·尤贝尔的贡献:把历史命令按输入文本中的“词”来处理,并在较早版本中制作原型。埃里克·奥尔曼提供了多项意见,帮助整理已有概念及删除不必要的功能。

这份手册的示例展示了一段带有“October, 1978”注记的C Shell源文件。这段记录把当时的使用说明与可运行程序联系起来:手册让用户查看源文件,再把同一个文件交给排版和打印工具。历史替换被放在实际终端操作中讲解。

参考:[1]

重新利用刚才的命令

历史机制保存先前命令中的词,允许用户在新命令中重新取用。两个感叹号表示重用上一条命令,“!$”表示取上一条命令的最后一个词。这比重新输入较长文件名更方便,也使纠正键入错误成为日常操作。

4.3BSD修订手册给出的例子是先查看bug.c,再输入“cc !$”;解释器把最后一个参数展开为bug.c,形成编译该文件的命令。这里复用的是命令文本,随后仍由编译器完成编译,C Shell不负责解释C程序本身。

参考:[1] [3]

命令序列与控制结构

C Shell也可以从文件读取命令。早期手册列出与C语言相近的算术和逻辑表达式,以及条件判断和循环。foreach把一个列表中的值逐个赋给变量,并重复执行相应命令段;这些结构让用户把终端上的一串操作写成可重复使用的过程。

手册以处理若干C源文件的脚本说明这种方法:遍历输入文件,检查条件,再比较文件并决定是否复制。其作用是协调已有系统工具。手册还指出,处理源文件依赖关系时,make所组织的规则通常比另写一组命令过程更合适。

参考:[1] [3]

随BSD发行和移植

麦库西克记述,1978年中伯克利准备更新软件集合,形成2BSD,随后继续吸收用户反馈。乔伊后来把其中的编辑器、C Shell等程序移植到VAX;1979年12月发出的3BSD,把这些工具与支持虚拟内存的系统结合起来。

斯皮内利斯对保存下来的Unix代码快照进行研究,也把csh列在2BSD所含工具之中,并确认1979年末3BSD沿用了2BSD的软件扩展。C Shell因此作为一整套软件环境的组成部分传播,取得发行版的用户也能取得相应工具与说明材料。

参考:[2] [4]

后来加入的作业控制

1980年的BSD发展带来另一项重要变化。乔伊整合了吉姆·卡尔普的作业控制功能,4BSD于当年10月发行。后来的C Shell手册把作业控制和目录栈明确归功于卡尔普;这些功能属于持续演进的结果。

在4.3BSD修订手册描述的环境中,用户可暂停前台作业,用bg使其在后台继续,或用fg把它送回前台。程序仍在同一终端会话中接受管理,交互工作不必总等一项任务结束才开始下一项。早期的历史替换与后来成熟的作业控制共同塑造了C Shell的使用方式。

参考:[2] [3] [4]