如何从通用 (POSIX) shell实现read -e
(通过readline
和 中打开行编辑功能bash
)的效果?我不想因为这个命令而失去 POSIX 兼容性。
我想从终端增量读取一行输入,并允许用户一些基本的行编辑功能;INS, DEL, 右, 左 HOME, END, Backspace
每次修改字符串时,我都想对其进行处理,以对文本文件进行增量正则表达式搜索。
这些编辑键和其他键会生成多个输入字符,这
使得解释输入变得相当困难,例如 C-Left 生成 6 个字符。
有没有一种简单的方法来实现这种逐字符的可编辑输入?
我特别想知道如何在 bash 中执行此操作,因为其余的处理将是 bash .. 其他建议也欢迎..
这是我开始的方式,但它有点失控,有这么多潜在的控制代码......
#!/bin/bash
IFS=$'\n'
while true ;do
read -n 1 c
((${#c}==0)) && break # Exit the loop. Input length is 0
# ie. The user has pressed Enter
echo "xx=$(echo -n "$c"|xxd -p)="
# 1b 5b 32 7e "INS"
# 1b 5b 33 7e "DEL"
# 1b 5b 43 "RIGHT"
# 1b 5b 44 "LEFT"
# 1b 5b 46 …
Run Code Online (Sandbox Code Playgroud)