使用read而不在终端上触发换行操作

Gar*_*oyd 10 bash terminal newline

我现在有这个

$PROMPT=">"
while read -p "${PROMPT}" line; do
  echo -en "\r"
  some_info_printout($line)
  echo -en "\n${PROMPT}"
done
Run Code Online (Sandbox Code Playgroud)

这给出了这样的输出

>typed input
INFO OUT ["typed input"]
>more text
INFO OUT ["more text"]
>
Run Code Online (Sandbox Code Playgroud)

我想要的是做一个read并忽略换行动作,以便预先存在的文本可以覆盖现有的行

INFO OUT ["typed input"]
INFO OUT ["more text"]
>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

Kev*_*vin 13

Enter导致read以一定返回将光标移动到下一行.您需要使用终端转义将其恢复到上一行.无论如何,你的脚本的其余部分都有一些问题.这是有用的,它应该给你一个更好的起点:

#!/bin/bash -e

PROMPT=">"
while read -p "${PROMPT}" line; do
        echo -en "\033[1A\033[2K"
        echo "You typed: $line"
done  
Run Code Online (Sandbox Code Playgroud)

\033是一个Esc; 在\033[1A将光标移动到上一行,\033[2K删除一切是就可以了.

  • FWIW,bash的echo也识别逃逸的转义序列`\ e`. (3认同)