AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 689401
Accepted
terdon
terdon
Asked: 2022-02-06 06:24:48 +0800 CST2022-02-06 06:24:48 +0800 CST 2022-02-06 06:24:48 +0800 CST

什么shell使用readline?

  • 772

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

这让我感到疑惑。为什么这只影响我系统上特定的 shell 子集?不是所有的贝壳都用readline吗?有什么一般规则吗?为什么bash,zsh并fish改变了他们的行为而其他 shell 没有?

shell readline
  • 1 1 个回答
  • 1052 Views

1 个回答

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2022-02-06T06:37:58+08:002022-02-06T06:37:58+08:00

    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 版本中使用了 's readline 的修改版本,bash因为它自己的行编辑器还没有准备好,但在 1991 年四个月后在 2.0 中切换到它自己的版本。从README1.0 中的文件:

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

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

    Byron Rakitzis的 Unix V10 / Plan9 rcshell 的克隆让您在编译时可以选择行编辑器:GNU readline、Simmule Turnereditline和 Gert-Jan Vons vrl。第一个版本只提供 readline。es并且akanga,基于rc提供readlinevs的选择editline。

    busybox 有自己的行编辑器,由它的hush和ash基于的 shell 以及其他小程序(例如它的bc、ed、fdisk.

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

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

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


    ¹ 见shell emacs 命令行编辑模式最终被省略了,因为很明显 KornShell 版本和与 GNU 系统一起分发的编辑器在某些方面存在分歧。emacs 的作者要求要么删除 POSIX emacs 模式,要么有大量未指定的条件。尽管 KornShell 作者同意考虑更改以使 shell 保持一致,但标准开发人员当时决定推迟规范。当时,假设后续草案会在可接受的定义上趋同,但这并没有发生,而且似乎没有这样做的动力。在任何情况下,实现都可以根据用户最熟悉的编辑器的确切模型免费提供额外的命令行编辑模式。”在POSIX规范的 RATIONALE 部分sh。

    • 18

相关问题

  • 这个命令是如何工作的?mkfifo /tmp/f; 猫/tmp/f | /bin/sh -i 2>&1 | 数控 -l 1234 > /tmp/f

  • FreeBSD 的 sh:列出函数

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • grep -v grep 有什么作用

  • 如何将带有〜的路径保存到变量中?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve