哪些 shell 使用 readline?

哪些 shell 使用 readline?

我最近发布了一个问题bash关于我在、和 shell中观察到的奇怪行为,fish但、、或shellzsh没有表现出这种行为。事实证明该行为是由tcshcshkshdash变化在库的默认设置中readline,我通过添加set enable-bracketed-paste Off到我的~/.inputc.

这让我想知道。为什么这只影响我系统上特定的 shell 子集?不是所有的shell都使用吗readline?有某种一般规则吗?为什么bashzshfish改变了它们的行为,而其他 shell 却没有?

答案1

readlinebash由同一作者同时实现,并bash在流行的 shell 中使用,大多数只是bash.

readline库是从 bash 衍生出来的。bash1.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。从README1.0 中的文件:

这是 zsh v1.0 版本。我将 Brian Fox 编写的 GNU“readline”编辑器合并到 shell 中,只是为了让我的生活暂时更轻松。我对它做了很多修改,所以如果编辑器中有任何错误,那可能是我的错。 readline 将不会成为下一版本 zsh 的一部分。

dash基于 Ash 的 shell 通常使用 BSD 的 libedit(在编译时通常未启用它的情况下,因为dash它仅用于运行脚本,而不是作为交互式 shell)。

Byron Rakitzis克隆的 Unix V10 / Plan9 rcshell 为您提供了编译时行编辑器的选择:GNU readline、Simmule Turnereditline和 Gert-Jan Vons vrl。第一个版本仅提供 readline。es并且akanga,基于提供vsrc的选择。readlineeditline

hushbusybox 有自己的行编辑器,由它的和ash基于 shell 以及其他小程序(例如它的bced、)使用fdisk

readline很棒,因为它提供了一个行编辑器,可以(并且)在许多不同的工具中使用,提供了一致性,但是,尽管它可能是功能最丰富的通用行编辑库之一(如果不是功能最丰富的话),但它的用途相对有限。它也根据 GPL 获得许可,因此只能在根据 GPL 许可的软件中使用GPL 或兼容

大多数 shell 包括 ksh、pdksh 及其衍生物、tcsh、zsh、fish 或 yash 都有自己的行编辑器,通常更高级。 ksh 的行编辑器是在 1983 年左右编写的bash,而 bash 的 readline 大多复制了这个界面。pdkshtcsh编辑器也早于 bash 和 readline。viPOSIX 指定基于 ksh 的 -style 行编辑器。emacsPOSIX 没有指定这一点,因为 Richard Stallman(GNU 的主要作者emacs,顺便也提出了“POSIX”名称)反对它。

请注意,您有充分的理由希望在支持它的终端编辑器或行编辑器中启用括号粘贴模式。看:我如何保护自己免受这种剪贴板滥用行为的侵害?


参见“在早期的提案中,包含了源自 KornShell 的 emacs 命令行编辑模式,尽管 emacs 编辑器本身并未包含在内。emacs 支持者社区坚持认为完整的 emacs 编辑器不应标准化,因为他们担心试图标准化这个非常强大的环境将鼓励供应商发布缺乏社区所需的可扩展性的严格一致的版本。原始 emacs 程序的作者也表达了他希望省略该程序的愿望。此外,有许多历史系统不包括该程序。 emacs,或者包含它但不支持它,但是很少有不包含和支持 vi 的 shell emacs 命令行编辑模式最终被省略,因为很明显 KornShell 版本和随 GNU 系统一起分发的编辑器有。 emacs 的作者要求删除 POSIX emacs 模式,或者有大量未指定的条件。尽管 KornShell 作者同意考虑进行更改以使 shell 保持一致,但标准开发人员当时决定推迟规范。当时,人们认为后续草案将就可接受的定义达成一致,但这种情况并未发生,而且似乎也没有这样做的动力。无论如何,实现可以根据用户最熟悉的编辑器的确切模型免费提供额外的命令行编辑模式。”POSIXsh规范的 RATIONALE 部分

相关内容