连续读取行,进行修改和删除?

时间:2019-05-09 18:16:48

标签: shell fish

我想编写一个脚本,该脚本在被调用时会响应提示,并在该提示下连续读取输入的行,而无需用户按Enter键。

$ myscript
>

我几乎可以通过循环read -n1并连接结果来做到这一点,但是我不知道如何处理删除,光标移动以及在行中较早插入字符。

据我所知,此功能不是内置于read实现中的,但是有一种方便的方法吗?

我要添加标签,因为如果没有POSIX,我会(比)对特定于鱼的解决方案感到满意。


理想情况下,我会逐行接收stdin上的行的状态。

例如如果用户键入Hi, my name is Chale<D><D>rles,我的输入将是:

H
Hi
Hi,
[...]
Hi, my name is Chal
Hi, my name is Chale
Hi, my name is Chal
Hi, my name is Cha
Hi, my name is Char
Hi, my name is Charl
Hi, my name is Charle
Hi, my name is Charles

1 个答案:

答案 0 :(得分:0)

这不能在fish,ksh或我熟悉的任何其他shell中完成。在ksh中,您可能会想使用KEYBD陷阱。问题在于,在对角色执行操作之前(例如,将其插入缓冲区)调用了陷阱。这样KEYBD陷阱可以修改字符。因此,您的函数始终是键入的字符之后的一个字符。您需要使用C(或类似语言)编写一个使用readline库的程序(或自己重新设计轮子)。