答案1
readline
bash
由同一作者同时实现,并bash
在流行的 shell 中使用,大多数只是bash
.
该readline
库是从 bash 衍生出来的。bash
1.02的ChangeLog
文件有:
Wed Jun 28 16:51:42 1989 Brian Fox (bfox at aurel) * New directory: LIB contains readline and history stuff, and is Make-able on its own. Also contains its own ChangeLog * history.c: removed shell dependent stuff, made into standalone library. Tue Jun 27 13:05:54 1989 Brian Fox (bfox at aurel) * readline.c: removed shell dependent stuff. * New file: bashline.c contains all of the shell specific readline material in an attempt to begin using the readline stuff as a library. Mon Jun 26 13:35:16 1989 Brian Fox (bfox at aurel) [...] * readline.c, jobs.c Make commands that do not complete sucessfully restore the tty state to whatever it was before the command was executed.
zsh
在 1990 年的第一个 1.0 版本中使用了 的 readline 的修改版本,bash
因为它自己的行编辑器尚未准备好,但四个月后的 1991 年在 2.0 中切换到自己的 readline。从README
1.0 中的文件:
这是 zsh v1.0 版本。我将 Brian Fox 编写的 GNU“readline”编辑器合并到 shell 中,只是为了让我的生活暂时更轻松。我对它做了很多修改,所以如果编辑器中有任何错误,那可能是我的错。 readline 将不会成为下一版本 zsh 的一部分。
dash
基于 Ash 的 shell 通常使用 BSD 的 libedit(在编译时通常未启用它的情况下,因为dash
它仅用于运行脚本,而不是作为交互式 shell)。
Byron Rakitzis克隆的 Unix V10 / Plan9 rc
shell 为您提供了编译时行编辑器的选择:GNU readline
、Simmule Turnereditline
和 Gert-Jan Vons vrl
。第一个版本仅提供 readline。es
并且akanga
,基于提供vsrc
的选择。readline
editline
hush
busybox 有自己的行编辑器,由它的和ash
基于 shell 以及其他小程序(例如它的bc
、ed
、)使用fdisk
。
readline
很棒,因为它提供了一个行编辑器,可以(并且是)在许多不同的工具中使用,提供了一致性,但是,尽管它可能是功能最丰富的通用行编辑库之一(如果不是功能最丰富的话),但它的用途相对有限。它也根据 GPL 获得许可,因此只能在根据 GPL 许可的软件中使用GPL 或兼容。
大多数 shell 包括 ksh、pdksh 及其衍生物、tcsh、zsh、fish 或 yash 都有自己的行编辑器,通常更高级。 ksh 的行编辑器是在 1983 年左右编写的bash
,而 bash 的 readline 大多复制了这个界面。pdksh
行tcsh
编辑器也早于 bash 和 readline。vi
POSIX 指定基于 ksh 的 -style 行编辑器。emacs
POSIX 没有指定这一点,因为 Richard Stallman(GNU 的主要作者emacs
,顺便也提出了“POSIX”名称)反对它。
请注意,您有充分的理由希望在支持它的终端编辑器或行编辑器中启用括号粘贴模式。看:我如何保护自己免受这种剪贴板滥用行为的侵害?。
参见“在早期的提案中,包含了源自 KornShell 的 emacs 命令行编辑模式,尽管 emacs 编辑器本身并未包含在内。emacs 支持者社区坚持认为完整的 emacs 编辑器不应标准化,因为他们担心试图标准化这个非常强大的环境将鼓励供应商发布缺乏社区所需的可扩展性的严格一致的版本。原始 emacs 程序的作者也表达了他希望省略该程序的愿望。此外,有许多历史系统不包括该程序。 emacs,或者包含它但不支持它,但是很少有不包含和支持 vi 的 shell emacs 命令行编辑模式最终被省略,因为很明显 KornShell 版本和随 GNU 系统一起分发的编辑器有。 emacs 的作者要求删除 POSIX emacs 模式,或者有大量未指定的条件。尽管 KornShell 作者同意考虑进行更改以使 shell 保持一致,但标准开发人员当时决定推迟规范。当时,人们认为后续草案将就可接受的定义达成一致,但这种情况并未发生,而且似乎也没有这样做的动力。无论如何,实现可以根据用户最熟悉的编辑器的确切模型免费提供额外的命令行编辑模式。”在POSIXsh
规范的 RATIONALE 部分。