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

Bash 在终端上使用read而不触发换行操作,bash,terminal,newline,Bash,Terminal,Newline,我现在有这个 $PROMPT=“>” 同时读取-p“${PROMPT}”行;做 echo-en“\r” 一些信息打印输出($line) echo-en“\n${PROMPT}” 完成 这样的输出 >typed input INFO OUT ["typed input"] >more text INFO OUT ["more text"] > 我想做的是执行读取并忽略换行操作,这样精确文本可以覆盖现有行 INFO OUT ["typed input"] INFO OUT ["

我现在有这个

$PROMPT=“>”
同时读取-p“${PROMPT}”行;做
echo-en“\r”
一些信息打印输出($line)
echo-en“\n${PROMPT}”
完成
这样的输出

>typed input
INFO OUT ["typed input"]
>more text
INFO OUT ["more text"]
>
我想做的是执行
读取
并忽略换行操作,这样精确文本可以覆盖现有行

INFO OUT ["typed input"]
INFO OUT ["more text"]
>
任何帮助都将不胜感激。

导致
read
返回的回车键必然会将光标移动到下一行。您需要使用终端转义将其返回到上一行。 不管怎样,脚本的其余部分都有一些问题。以下是一些行之有效的方法,它应该为您提供一个更好的起点:

#!/bin/bash -e

PROMPT=">"
while read -p "${PROMPT}" line; do
        echo -en "\033[1A\033[2K"
        echo "You typed: $line"
done  

\033
是一个Esc;
\033[1A
将光标移动到前一行,
\033[2K
将删除光标上的任何内容。

另一种在
echo
之后将光标保持在同一行的解决方案是使用
\c
转义字符和
-e
标志

echo -e "Want to do something fun? (y/n) \c"
read -r
echo "You answered: $REPLY"

注意:这可能是特定于某些版本的
echo

-s
可能会超出顶部,因为程序很难正确键入FWIW,bash的echo还可以识别转义序列
\e