我目前有这个
$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"]
>
任何帮助都将不胜感激。
答案 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"
注意:它可能特定于某些版本的 echo
:https://stackoverflow.com/a/7154820/2110909