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。
编辑:strace
ing rlwrap
在两个系统上,其中只有一个显示错误,没有显示任何显着差异,因此我们得出结论,这可能不是 rlwrap
问题。
我对破折号的看法是错误的。它实际上在破折号下运行良好,因此我的解决方案是停止在脚本中使用 bash 特定功能并将其切换到破折号。
更新: 后来我发现使用它作为 shebang 也可以与 bash 一起使用:
#!/bin/bash --noediting
这基本上禁用了 bash 的 readline。
我在脚本中使用类似这样的东西:
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。
编辑:strace
ing rlwrap
在两个系统上,其中只有一个显示错误,没有显示任何显着差异,因此我们得出结论,这可能不是 rlwrap
问题。
我对破折号的看法是错误的。它实际上在破折号下运行良好,因此我的解决方案是停止在脚本中使用 bash 特定功能并将其切换到破折号。
更新: 后来我发现使用它作为 shebang 也可以与 bash 一起使用:
#!/bin/bash --noediting
这基本上禁用了 bash 的 readline。