【发布时间】:2021-04-04 05:36:09
【问题描述】:
我想知道是否有办法将文本打印到 shell 的当前缓冲区/光标中以便可以对其进行编辑。我正在构建一个程序,它将一些文本值存储在内存中,并且需要一种简单的方法来在 shell 中编辑它们而不重写整个值。所以以某种方式引用 shell 中的当前编辑缓冲区并打印到它会非常好。
但是,我在这里只使用常识。也许它更复杂。期待可能的解决方案。
【问题讨论】:
我想知道是否有办法将文本打印到 shell 的当前缓冲区/光标中以便可以对其进行编辑。我正在构建一个程序,它将一些文本值存储在内存中,并且需要一种简单的方法来在 shell 中编辑它们而不重写整个值。所以以某种方式引用 shell 中的当前编辑缓冲区并打印到它会非常好。
但是,我在这里只使用常识。也许它更复杂。期待可能的解决方案。
【问题讨论】:
每个 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 命令选项的信息。
【讨论】: