我在脚本中使用了以下内容:
REPLY=$(rlwrap head -n 1)
实际上有更多选择,但这足以重现此问题。只要我不按Ctrl-C退出,它就可以完美地实现我的目的。如果这样做,输入回声将在终端上停止,而我发现要恢复它的唯一方法是盲目键入reset
。
-I
标志没有帮助。我也尝试过:
rlwrap head -n 1 | REPLY=$(cat)
,但是当我按Enter键时未设置REPLY。 我在bash和dash中都尝试过,结果都相同编辑:抱歉,由于shebang上的错字,没有执行破折号。它可以在破折号中正常工作。
如何为rlwrap
的输出设置变量,并能够在不丢失输入回波的情况下进行中断?同样出于好奇,有人知道这是怎么回事吗?
答案 0 :(得分:1)
您在rlwrap
结构中使用$(...)
是正确的。您可以执行此操作,这是rlwrap
的“透明度”的一部分:与<command>
配合使用的任何内容也应与rlwrap <command>
配合使用。
我无法在任何系统上重现该问题。
这意味着您发现了一个错误。您已经在rlwrap
Github网站上发布了an issue。
编辑:strace
在两个系统上rlwrap
,其中只有一个显示错误,没有明显的区别,因此我们得出结论,这可能不是rlwrap
问题。
答案 1 :(得分:0)
我对破折号是错误的。在破折号下实际上可以正常工作,因此我的解决方案是停止在脚本中使用特定于bash的功能,并将其切换为破折号。
更新:后来我发现将其用作shebang使其也可以与bash一起使用:
#!/bin/bash --noediting
这基本上会禁用bash的读取行。