0

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

REPLY=$(rlwrap head -n 1)

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

-I国旗没有帮助。我也试过这个:

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

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

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

4

2 回答 2

1

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

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

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

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

于 2019-01-06T14:47:20.453 回答
0

我错了破折号。它实际上在破折号下工作正常,因此我的解决方案是停止在脚本中使用特定于 bash 的功能并将其切换为破折号。

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

#!/bin/bash --noediting

这基本上禁用了 bash 的 readline。

于 2019-01-07T15:17:19.793 回答