【问题标题】:Print text to shell without advancing buffer在不推进缓冲区的情况下将文本打印到 shell
【发布时间】:2021-04-04 05:36:09
【问题描述】:

我想知道是否有办法将文本打印到 shell 的当前缓冲区/光标中以便可以对其进行编辑。我正在构建一个程序,它将一些文本值存储在内存中,并且需要一种简单的方法来在 shell 中编辑它们而不重写整个值。所以以某种方式引用 shell 中的当前编辑缓冲区并打印到它会非常好。

但是,我在这里只使用常识。也许它更复杂。期待可能的解决方案。

【问题讨论】:

    标签: c shell terminal console


    【解决方案1】:

    每个 shell 处理用户输入的方式不同。如果有“编辑缓冲区”,它很可能是在 shell 本身中实现的。 (Linux 终端确实有一个原始的行编辑功能,但据我所知,没有办法将数据注入到行中。但是,只有非常原始的 shell 依赖于本机的行编辑。)

    所以这个问题必须针对某些特定的外壳提出。

    以防万一,这里是 bash 的答案。

    Bash 依赖 readline 库从终端(类似)标准输入执行命令输入。 (命令行历史是使用相关的history 库提供的。)这些库有很多特性,而 bash 并不提供对所有这些特性的访问;如有必要,您可以使用 C 或某种脚本语言编写程序,并带有 readline 绑定。

    但是 bash 确实为您提供了用一行文本预加载输入所需的工具。从 shell 脚本收集输入的标准方法是通过 read 命令,它(几乎)总是一个“内置”的 shell。 read 的基本配置是由 Posix 标准定义的,但是 bash 版本提供了很多有用的扩展选项,包括:

    • -e:使用readline 库(启用制表符补全、历史记录和行编辑)。

    • -i text:如果正在使用readline,则使用指定的文本预加载readline的编辑缓冲区。

    bash manual 有更多关于 read 命令选项的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2021-08-31
      • 2012-06-25
      • 2017-04-03
      相关资源
      最近更新 更多