0

目的是将光标放在屏幕上的某个位置(屏幕中心附近),输入一些初始文本,并提示用户输入更多文本以保存在变量中,同时为他保留正常的readline行编辑功能.

我最初的尝试是:

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

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

执行以下脚本时

echo -n "______________"
read -e risp

只要没有输入,Backspace就无效(这是我喜欢的一种行为,因为echo之前输入的字符read不能在 期间删除read)。

但是,键入某些内容(例如某些文本)然后用 删除它(完全,直到并包括第一个键入的字符)Backspace,将导致光标在Backspace删除第一个键入的字符后立即跳转到终端的第一个冒号。

换句话说,当脚本启动时,Backspace什么都不做,whileXBackspace将导致 cursort 跳转到终端的第一列。

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

鉴于这个问题的标题,我希望它与当前问题有关,但我不明白它是否真的如此。

4

1 回答 1

1

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

-e选项要求read使用readline库来处理输入,从而允许更广泛的行编辑字符。但是,为了实现这些行为,readline需要能够重绘当前行,如果在读取开始时当前行上有任何内容,则这是不可能的。这是不可能的,因为 Unix 没有为应用程序提供查看控制台上显示内容的机制。所以在某些情况下,readline会简单的清除线路。使用该-p选项允许readline输出提示,然后它可以知道该行当前的样子。

于 2019-10-13T07:00:59.380 回答