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

时间:2012-02-03 19:52:05

标签: bash terminal newline

我目前有这个

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

给出这样的输出

>typed input
INFO OUT ["typed input"]
>more text
INFO OUT ["more text"]
>

我想要的是read并忽略换行操作,以便预先存在的文字可以覆盖现有的行

INFO OUT ["typed input"]
INFO OUT ["more text"]
>

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:11)

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

#!/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将删除其上的任何内容。

答案 1 :(得分:0)

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

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

注意:它可能特定于某些版本的 echohttps://stackoverflow.com/a/7154820/2110909