目的是将光标置于屏幕上某个位置(围绕屏幕中心),输入一些初始文本,并提示用户输入更多要保存在变量中的文本,同时保持其正常readline
行编辑功能。
我最初的尝试是:
echo
/ printf
并留出一些空白,echo
/ printf
将光标再次水平居中,read -i "editable pre-text" -e answer
。但是我注意到了下面描述的行为,并精心制作了以下示例,以两行代码为例进行演示。
执行以下脚本时
echo -n "______________"
read -e risp
只要没有输入任何输入,退格键都是无效的(这是我喜欢的行为,因为echo
在read
之前输入的字符不能在read
中删除。)
但是,键入某些内容(例如某些文本),然后使用 Backspace 删除该内容(完全包括第一个键入的字符),将导致光标跳至第一个冒号一旦 Backspace 删除了第一个键入的字符,该终端就会立即退出。
换句话说,在脚本启动时, Backspace 不执行任何操作,而 X Backspace 将导致游标跳到第一个终端的列。
这种行为的原因是什么,我该如何避免?
考虑到this question的标题,我希望它与当前的标题相关,但我不知道它是否确实与之相关。
答案 0 :(得分:1)
如评论中所述,您应该使用read
的{{1}}选项来打印提示,而不要尝试在-p
命令之前进行设置。
read
选项要求-e
使用read
库来处理输入,从而允许更大范围的行编辑字符。但是,为了实现这些行为,readline
必须能够重绘当前行,并且当读取开始时当前行上没有任何内容时,这是不可能的。这是不可能的,因为Unix没有为应用程序提供任何机制来查看控制台上显示的内容。因此,在某些情况下,readline
只会清除该行。使用readline
选项允许-p
输出提示,然后它可以知道当前行的外观。