urxvt中的bash-读取变量时在alrady类型的字符上退格

urxvt中的bash-读取变量时在alrady类型的字符上退格,bash,command-line,user-input,urxvt,Bash,Command Line,User Input,Urxvt,这样做的目的是将光标放在屏幕上的某个位置(围绕屏幕中心),输入一些初始文本,并提示用户输入更多要保存在变量中的文本,同时让用户保留正常的读取行行编辑功能 我最初的尝试是: 将光标垂直居中echo/printf加上一些空白 通过echo/printf,再次将光标水平居中 问题阅读-i“可编辑的预文本”-e答案 然而,我注意到下面描述的行为,并制作了以下两行代码示例来演示它 执行以下脚本时 echo -n "______________" read -e risp 只要没有输入,退格就无效(这是我

这样做的目的是将光标放在屏幕上的某个位置(围绕屏幕中心),输入一些初始文本,并提示用户输入更多要保存在变量中的文本,同时让用户保留正常的
读取行
行编辑功能

我最初的尝试是:

  • 将光标垂直居中
    echo
    /
    printf
    加上一些空白
  • 通过
    echo
    /
    printf
    ,再次将光标水平居中
  • 问题
    阅读-i“可编辑的预文本”-e答案
  • 然而,我注意到下面描述的行为,并制作了以下两行代码示例来演示它

    执行以下脚本时

    echo -n "______________"
    read -e risp
    
    只要没有输入,退格就无效(这是我喜欢的行为,因为
    echo
    read
    之前输入的字符在
    read
    期间无法删除)

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

    换句话说,当脚本启动时,Backspace不起任何作用,而XBackspace将导致cursort跳转到终端的第一列

    这是什么原因,我怎样才能避免呢


    鉴于的标题,我希望它与当前的相关,但我不明白它是否真的相关。

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


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

    read-p\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    ?为什么要使用
    -e
    read-e
    为用户输入激活readline,它无法删除
    echo
    的输出。添加了详细信息以解决第一条注释。关于第二条评论,它看起来确实如此,或者至少具有与它相同的效果。