rlwrap 命令替换中的 Ctrl-C 停止回显

Ctrl-C in a rlwrap command substitution stops echo

我在脚本中使用类似这样的东西:

REPLY=$(rlwrap head -n 1)

实际上有更多选项,但足以重现问题。它非常适合我的目的……只要我不按 Ctrl-C 退出即可。如果我这样做,输入回声会在终端上停止,我发现恢复它的唯一方法是盲目输入 reset.

-I 标志没有帮助。我也试过这个:

rlwrap head -n 1 | REPLY=$(cat)

但是当我按 Enter 键时没有设置回复。 我在 bash 和 dash 中都试过了,结果相同 编辑:抱歉,由于 shebang 上的错字,dash 没有被执行。它在破折号中正常工作。

如何为 rlwrap 的输出设置一个变量并能够在不丢失输入回显的情况下中断?同样出于好奇,有谁知道这里发生了什么?

您在 $(...) 构造中使用 rlwrap 是正确的。你可以做到这一点是 rlwrap 的 "transparency" 的一部分:任何适用于 <command> 的东西也应该适用于 rlwrap <command>.

我无法在我的任何系统上重现该问题。

这意味着您发现了一个错误。您已经在 rlwrap Github 网站上发布了 an issue

编辑:straceing rlwrap 在两个系统上,其中只有一个显示错误,没有显示任何显着差异,因此我们得出结论,这可能不是 rlwrap 问题。

我对破折号的看法是错误的。它实际上在破折号下运行良好,因此我的解决方案是停止在脚本中使用 bash 特定功能并将其切换到破折号。

更新: 后来我发现使用它作为 shebang 也可以与 bash 一起使用:

#!/bin/bash --noediting

这基本上禁用了 bash 的 readline。