urxvt中的bash-在读取变量时对Alrady键入的字符进行退格

时间:2019-10-12 23:10:18

标签: bash command-line user-input urxvt

目的是将光标置于屏幕上某个位置(围绕屏幕中心),输入一些初始文本,并提示用户输入更多要保存在变量中的文本,同时保持其正常readline行编辑功能。

我最初的尝试是:

  1. 将光标垂直居中echo / printf并留出一些空白,
  2. 通过echo / printf将光标再次水平居中,
  3. 问题read -i "editable pre-text" -e answer

但是我注意到了下面描述的行为,并精心制作了以下示例,以两行代码为例进行演示。

执行以下脚本时

echo -n "______________"
read -e risp

只要没有输入任何输入,退格键都是无效的(这是我喜欢的行为,因为echoread之前输入的字符不能在read中删除。)

但是,键入某些内容(例如某些文本),然后使用 Backspace 删除该内容(完全包括第一个键入的字符),将导致光标跳至第一个冒号一旦 Backspace 删除了第一个键入的字符,该终端就会立即退出。

换句话说,在脚本启动时, Backspace 不执行任何操作,而 X Backspace 将导致游标跳到第一个终端的列。

这种行为的原因是什么,我该如何避免?

考虑到this question的标题,我希望它与当前的标题相关,但我不知道它是否确实与之相关。

1 个答案:

答案 0 :(得分:1)

如评论中所述,您应该使用read的{​​{1}}选项来打印提示,而不要尝试在-p命令之前进行设置。

read选项要求-e使用read库来处理输入,从而允许更大范围的行编辑字符。但是,为了实现这些行为,readline必须能够重绘当前行,并且当读取开始时当前行上没有任何内容时,这是不可能的。这是不可能的,因为Unix没有为应用程序提供任何机制来查看控制台上显示的内容。因此,在某些情况下,readline只会清除该行。使用readline选项允许-p输出提示,然后它可以知道当前行的外观。