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

时间:2019-01-05 16:09:23

标签: sh sigint rlwrap

我在脚本中使用了以下内容:

REPLY=$(rlwrap head -n 1)

实际上有更多选择,但这足以重现此问题。只要我不按Ctrl-C退出,它就可以完美地实现我的目的。如果这样做,输入回声将在终端上停止,而我发现要恢复它的唯一方法是盲目键入reset

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

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

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

如何为rlwrap的输出设置变量,并能够在不丢失输入回波的情况下进行中断?同样出于好奇,有人知道这是怎么回事吗?

2 个答案:

答案 0 :(得分:1)

您在rlwrap结构中使用$(...)是正确的。您可以执行此操作,这是rlwrap的“透明度”的一部分:与<command>配合使用的任何内容也应与rlwrap <command>配合使用。

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

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

编辑:strace在两个系统上rlwrap,其中只有一个显示错误,没有明显的区别,因此我们得出结论,这可能不是rlwrap问题。

答案 1 :(得分:0)

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

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

#!/bin/bash --noediting

这基本上会禁用bash的读取行。